Назад к вопросам
Ozon Fresh
Junior — Middle
68
Какие функции необходимо переопределить в адаптере RecyclerView, чтобы отображать список с различными типами элементов?
Компании, где спрашивали
Ответ от нейросети
sobes.tech AI
Для отображения списка с различными типами элементов в адаптере RecyclerView необходимо переопределить следующие функции:
-
getItemViewType(int position)— возвращает целочисленный идентификатор типа элемента на позицииposition. Это позволяет адаптеру понимать, какой макет использовать для конкретного элемента. -
onCreateViewHolder(ViewGroup parent, int viewType)— создает ViewHolder соответствующего типа, основываясь наviewType, полученном изgetItemViewType. -
onBindViewHolder(RecyclerView.ViewHolder holder, int position)— связывает данные с ViewHolder, учитывая тип элемента.
Пример:
@Override
public int getItemViewType(int position) {
if (isTypeA(position)) {
return TYPE_A;
} else {
return TYPE_B;
}
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
if (viewType == TYPE_A) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_type_a, parent, false);
return new TypeAViewHolder(view);
} else {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_type_b, parent, false);
return new TypeBViewHolder(view);
}
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
if (holder instanceof TypeAViewHolder) {
((TypeAViewHolder) holder).bind(data.get(position));
} else if (holder instanceof TypeBViewHolder) {
((TypeBViewHolder) holder).bind(data.get(position));
}
}
Таким образом, эти методы обеспечивают поддержку нескольких типов элементов в одном списке.