Можно ли вернуть другой экземпляр класса ViewHolder для каждого типа держателя вида?

115
15

Ниже приведен мой код:

@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
if (getItemViewType(i) == REMMEND_TYPE) {
RecyclerView recyclerView = new RecyclerView(viewGroup.getContext());
recyclerView.setId(R.id.recycler_view);
return new RecommendedViewHolder(recyclerView);
} else {
View view = LayoutInflater.from(viewGroup.getContext()).inflate(
R.layout.home_item, viewGroup, false);
return new HomeViewHolder(view);
}
}

@Override
public int getItemViewType(int position) {
if (position == 5) {
return REMMEND_TYPE;
} else {
return -1;
}
// return super.getItemViewType(position);
}

и я получаю исключение класса cast: java.lang.ClassCastException: com.adapter.HomeViewHolder нельзя отнести к com.viewholder.RecommendedViewHolder

Поэтому мне интересно знать, что я могу вернуть только один тип класса ViewHolder для одного адаптера?

спросил(а) 2021-01-19T18:18:03+03:00 2 месяца, 4 недели назад
1
Решение
76

Причина, по которой я получил вопрос о выпуске класса, заключается в том, что второй параметр "i" в onBindViewHolder является viewType, а не значением позиции или индекса. Я использую я неправильно, я должен использовать я как тип представления напрямую. и мне интересно узнать, почему я автоматически генерирую метод переопределения, этот параметр сокращен до "i", для меня "i" означает индекс или позицию. Я исправляю код, как показано ниже, и теперь все в порядке.

@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) {
if (viewType == REMMEND_TYPE) {
RecyclerView recyclerView = new RecyclerView(viewGroup.getContext());
recyclerView.setId(R.id.recycler_view);
return new RecommendedViewHolder(recyclerView);
} else {
View view = LayoutInflater.from(viewGroup.getContext()).inflate(
R.layout.home_item, viewGroup, false);
return new HomeViewHolder(view);
}
}

@Override
public int getItemViewType(int position) {
if (position == 5) {
return REMMEND_TYPE;
}
return super.getItemViewType(position);
}

ответил(а) 2021-01-19T18:18:03+03:00 2 месяца, 4 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема