sPFApp/src/main/java/it/polimi/spf/app/fragments/profile/ProfileFieldViewFactory.java
@SuppressWarnings("unchecked")
	public <E> View createViewForField(ProfileField<E> field, ViewGroup container, FieldValueListener<E> listener) {
		E currentValue = mContainer.getFieldValue(field);

		if (field instanceof TagProfileField) {
			return createTagView((TagProfileField) field, (String[]) currentValue, listener, container, mMode == Mode.EDIT);
		}

		switch (mMode) {
		case SELF:
		case REMOTE:
			return createStandardDisplayView(field, currentValue, container);
		case EDIT:
			if (field instanceof MultipleChoicheProfileField) {
				return createSpinner((MultipleChoicheProfileField<E>) field, currentValue, listener, container);
			} else if (field instanceof DateProfileField) {
				return createDateView((DateProfileField) field, (Date) currentValue, (FieldValueListener<Date>) listener, container);
			} else {
				return createStandardEditView(field, currentValue, listener, container);
			}

		default:
			return null;
		}
	}
@SuppressWarnings("unchecked")
	public <E> View createViewForField(ProfileField<E> field, ViewGroup container, FieldValueListener<E> listener) {
		E currentValue = mContainer.getFieldValue(field);

		if (field instanceof TagProfileField) {
			return createTagView((TagProfileField) field, (String[]) currentValue, listener, container, mMode == Mode.EDIT);
		}

		switch (mMode) {
		case SELF:
		case REMOTE:
			return createStandardDisplayView(field, currentValue, container);
		case EDIT:
			if (field instanceof MultipleChoicheProfileField) {
				return createSpinner((MultipleChoicheProfileField<E>) field, currentValue, listener, container);
			} else if (field instanceof DateProfileField) {
				return createDateView((DateProfileField) field, (Date) currentValue, (FieldValueListener<Date>) listener, container);
			} else {
				return createStandardEditView(field, currentValue, listener, container);
			}

		default:
			return null;
		}
	}
Creates a new view to visualize the value and the clearance of the given
profile field. If the {@link Mode} of visualization is {@link Mode#EDIT},
the view will support modifications. Such modifications will trigger the
appropriate call to a {@link FieldValueListener}, if provided.

@param field
- the field to visualize
@param container
- the {@link ViewGroup} to which the view is intended to be
attached, as in {@link LayoutInflater#inflate(int, ViewGroup)}
@param listener
- the listener that will be notified of value or clearance
changes in {@link Mode#EDIT} mode.
@return - the view that visualizes the profile field. Please note that
the view is <strong>NOT</strong> attached to the container;