Я использую для 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, значит позиция уже сгенерирована и в теории можно использовать предыдущее значение (но очевидно в вашем случае это не так, так как предыдущее значение уже содержит в себе старый цвет).Сборка персонального компьютера от Artline: умный выбор для современных пользователей