Sobes.tech
Назад к вопросам
Junior — Middle
68

Какие функции необходимо переопределить в адаптере RecyclerView, чтобы отображать список с различными типами элементов?

Компании, где спрашивали
Ozon FreshOzon Fresh

Ответ от нейросети

sobes.tech AI

Для отображения списка с различными типами элементов в адаптере RecyclerView необходимо переопределить следующие функции:

  1. getItemViewType(int position) — возвращает целочисленный идентификатор типа элемента на позиции position. Это позволяет адаптеру понимать, какой макет использовать для конкретного элемента.

  2. onCreateViewHolder(ViewGroup parent, int viewType) — создает ViewHolder соответствующего типа, основываясь на viewType, полученном из getItemViewType.

  3. 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));
    }
}

Таким образом, эти методы обеспечивают поддержку нескольких типов элементов в одном списке.