Junior — Middle
Quelles fonctions doivent être redéfinies dans l'adaptateur RecyclerView pour afficher une liste avec différents types d'éléments?
sobes.tech IA
Réponse de l'IA
Для отображения списка с различными типами элементов в адаптере 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));
}
}
Таким образом, эти методы обеспечивают поддержку нескольких типов элементов в одном списке.