Я использую для Spinner
собственный адаптер, который должен изменять цвет первого пункта и в открытом состоянии, и в закрытом.
Проблема заключается в том, что после того, как был выбран другой пункт, при развёртывании Spinner
цвет меняет не только первый пункт, а ещё и который был выбран до этого. Остальные пункты черного цвета, как мне и надо.
Вот код:
class CustomAdapter<T> extends ArrayAdapter<T>{
CustomAdapter(Context cntxt, int resource, T[] objects) {
super(cntxt, resource, objects);
}
@NonNull
@Override
public View getView(int pos, @Nullable View convertView, @NonNull ViewGroup p) {
if (pos != 0)
return super.getView(pos, convertView, p);
TextView tv = (TextView) super.getView(pos, convertView, p);
tv.setTextColor(Color.MAGENTA);
return tv;
}
@Override
public View getDropDownView(int pos, @Nullable View convertView, @NonNull ViewGroup p) {
if (pos != 0)
return super.getDropDownView(pos, convertView, p);
TextView tv = (TextView) super.getDropDownView(pos, convertView, p);
tv.setTextColor(Color.MAGENTA);
return tv;
}
}
Логика работы с адаптером должна явно задавать оба состояния для айтема (как отображать если условие совпадает и если не совпадает), а не одну его часть (если условие совпадает, для остальных другое).
Используйте конструкцию if
- else
, явно указывая, как должен выглядеть элемент при совпадении условия и как при не совпадении. Это связано с тем, что вид айтемов переиспользуется и если не указано иного вида, может быть использован созданный ранее вид (для другого айтема).
TextView tv = (TextView) super.getView(pos, convertView, p);
if (pos != 0) tv.setTextColor(Color.BLACK);
else tv.setTextColor(Color.MAGENTA);
return tv;
Ваша логика отображения должна учитывать convertView
:
convertView==null
- это первое отображение позицииconvertView!=null
, значит позиция уже сгенерирована и в теории можно использовать предыдущее значение (но очевидно в вашем случае это не так, так как предыдущее значение уже содержит в себе старый цвет).Столкнулся с такой проблемой, как получение данных из листаКазалось бы что всё просто, но вот не совсем