Важное замечание! Все советы в комментариях относятся к RecyclerView и RecyclerView.Adapter которые не применимы к методу класса Spinner setAdapter(SpinnerAdapter adapter).
Сейчас у меня есть Spinner с кастомным extends ArrayAdapter<User>.
С выводом одного типа объекта проблем нет, но я не могу сообразить и найти толковую информацию о том, как правильно создать ArrayAdapter, который будет принимать объекты типа User, Separator, Bonus. В которых совершено разные поля и методы класса. А так же, каждому объекту соответствует свой xml макет, так же с разными элементами в нем (User - ImageView, TextView; Separator - только View с drawable background, но это не имеет отношения к вопросу; Bonus - ImageView, CheckBox)
1) Я не совсем понял назначения этих методов, особенно getViewTypeCount(), что произойдет, если я его не переопределю? getViewTypeCount() я могу и без этого метода определить тип, через instanceof например. Просто хочу понять, последний сделан для удобства или выполняет еще какую то функцию (оптимизация может быть)?
@Override
public int getItemViewType(int position) {
return super.getItemViewType(position);
}
@Override
public int getViewTypeCount() {
return super.getViewTypeCount();
}
2) Я использую ViewHolder как во многих уроках по адаптерам, т.е.
@Override
public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
ViewHolder viewHolder;
if (convertView == null) {
convertView = inflater.inflate...
} else {
viewHolder = (ViewHolder) convertView.getTag();
}
return convertView;
}
И класс private class ViewHolder {..., нужно ли создавать несколько ViewHolder под каждый тип объекта (3). И не будет ли конфликтов при переиспользовании convertView?
3) Как использовать несколько разных классов и xml макетов в одном ArrayAdaptere?
getView(...)). 2) можно использовать и один холдер, но если набор вью сильно отличается будет не очень удобно. 3) использовать ветвление по типам и типизировать адаптер общим предком всех моделей (можно конечноArrayAdapter<Object>, но, если возможно, лучше более конкретный тип)