Выбранный элемент в позиции 0 в android Spinner

У меня проблема с отображением первого элемента, выбранного в раскрывающемся меню spinner. Когда счетчик инициализируется впервые, строка заполняется "ничем выбранным видом", и когда что-то выбирается из выпадающего меню, вид скроллинга изменяется с выбранным значением из выпадающего списка. Это работает в каждом случае, за исключением случая, когда я выбираю первый элемент сразу после инициализации. Я пытаюсь сказать, что значение строки spinner записывает значение выбранного элемента в раскрывающемся списке в каждом случае, кроме 0 элемента. Zero item отображается в spinner только в том случае, если элемент 0 > выбран ранее. Если 0 выбран сразу после инициализации счетчика, он не будет отображаться.

Это приводит меня к выводу, что адаптер работает странным образом. Когда счетчик инициализирован, он заполняется по умолчанию. Впоследствии, если выбранный элемент выше значения по умолчанию, он изменит это значение по умолчанию, но если значение по умолчанию не изменяется, состояние остается неизменным? Другими словами, Spinner только изменит представление в случае различного выбранного значения из текущего? Другая вещь, которая меня беспокоит, заключается в том, что в методе getView я получаю правильное значение, правильное положение, но представление все равно не изменится. Подобно чему-то переопределяет метод переопределения и не позволяет просматривать изменение, если значение равно 0.

Вращающийся фрагмент

spinnerHairColor.setAdapter(new CustomSpinnerAdapter(R.string.hair_color, 
    getContext(), R.layout.spinner_dropdown, values.getHair_color()));
spinnerHairColor.setFocusableInTouchMode(true);
spinnerHairColor.setOnFocusChangeListener(spinnerFocusListener);

Адаптер

public class CustomSpinnerAdapter extends ArrayAdapter<Values.ValuesProperty> implements SpinnerAdapter {

private Context context;
private List<Values.ValuesProperty> valuesProperty;
protected LayoutInflater layoutInflater;
private int unselectedText;
private boolean init = false;


public CustomSpinnerAdapter(int unselectedText, Context context, int nothingSelectedLayout, List<Values.ValuesProperty> valuesProperty) {
    super(context, nothingSelectedLayout, valuesProperty);

    this.unselectedText = unselectedText;
    this.valuesProperty = valuesProperty;
    layoutInflater = LayoutInflater.from(context);
    this.context=context;
    init = true;
}



 @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View row = layoutInflater.inflate(R.layout.spinner_dropdown, parent, false);
        TextView tv = (TextView) row.findViewById(R.id.spinnerNothingText);

        if (position == 0 && init) {
            return getNothingSelectedView(parent);
        }

        Values.ValuesProperty v = getItem(position);
        tv.setText(getContext().getText(unselectedText) + ": " + v.getName());
        return row;
    }



 @Override
    public View getDropDownView(int position, View convertView, ViewGroup parent) {
        Values.ValuesProperty v = getItem(position);
        View row = layoutInflater.inflate(R.layout.item_spinner, parent, false);
        TextView tv = (TextView) row.findViewById(R.id.spinnerText);
        tv.setText(v.getName());
        return row;
    }

    protected View getNothingSelectedView(ViewGroup parent) 
    {
        View backView = layoutInflater.inflate(R.layout.spinner_dropdown, parent, false);
        TextView tv = (TextView) backView.findViewById(R.id.spinnerNothingText);
        tv.setText(getContext().getText(unselectedText));
        // to make sure if 0 is selected isnt inital 0
        init = false;
        return backView;
    }

}

Ответ 1

Мне удалось найти решение. Это адаптер, который работает для счетчика, который может иметь значение по умолчанию, если ничего не выбрано

public class CustomSpinnerAdapter extends ArrayAdapter<Values.ValuesProperty> implements SpinnerAdapter{

private Context context;
private List<Values.ValuesProperty> valuesProperty;
protected LayoutInflater layoutInflater;
private int unselectedText;
private boolean init = false;

    public CustomSpinnerAdapter(int unselectedText, Context context, int nothingSelectedLayout,
                            List<Values.ValuesProperty> valuesProperty) {
    super(context, nothingSelectedLayout, valuesProperty);

    this.unselectedText = unselectedText;
    this.valuesProperty = valuesProperty;
    layoutInflater = LayoutInflater.from(context);
    this.context = context;
    init = true;
    }


    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
    View row = layoutInflater.inflate(R.layout.spinner_dropdown, parent, false);
    TextView tv = (TextView) row.findViewById(R.id.spinnerNothingText);

    if (position == 0 && init) {
        init = false;
        tv.setText(getContext().getText(unselectedText));
        return row;
    }

    Values.ValuesProperty v = getItem(position);
    if (position == 0 && parent.hasFocus())
        notifyDataSetChanged();

    tv.setText(getContext().getText(unselectedText) + ": " + v.getName());
    return row;
}


    @Override
    public View getDropDownView(int position, View convertView, ViewGroup parent) {
    Values.ValuesProperty v = getItem(position);
    View rowDrop = layoutInflater.inflate(R.layout.item_spinner, parent, false);
    TextView tvDrop = (TextView) rowDrop.findViewById(R.id.spinnerText);
    tvDrop.setText(v.getName());
    return rowDrop;
    }
}