Страницы

Поиск по вопросам

среда, 19 декабря 2018 г.

Как добавить в RecyclerView разные элемент

У меня есть массив карточке (CardView) которые я загружаю в RecyclerView.
Я хочу разделять эти карточка своим элементом, не пойму как это можно сделать.
К примеру:
RecyclerView Заголовок1, кнопка с действием CardView CardView CardView Заголовок2, кнопка с действием CardView CardView CardView Заголовок3, кнопка с действием CardView CardView CardView RecyclerView


Ответ

Вам надо по позиции элемента определять его тип и в зависимости от этого загружать определённую разметку и отображать её:
//метод, в коем вы должны в зависимости от позиции элемента возвращать //её тип в виде числа, кое потом используется в onCreateViewHolder для загрузки разметки //и в onBindViewHolder для наполнения её данными @Override public int getItemViewType(int position) { if (position == 0) { return 0; } else { return 1; } }
@Override public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { RecyclerView.ViewHolder vh; View itemLayoutView;
//загружаем разметку в зависимости от типа и возвращаем //нужный холдер switch (viewType) { case 0: itemLayoutView = LayoutInflater.from(parent.getContext()).inflate(R.layout.zero_type_layout, parent, false); vh = new HolderZeroType(itemLayoutView); break; case 1: itemLayoutView = LayoutInflater.from(parent.getContext()).inflate(R.layout.first_type_layout, parent, false); vh = new HolderFirstType(itemLayoutView); break; }
return vh; }
@Override public void onBindViewHolder(final RecyclerView.ViewHolder holder, final int position) { switch (this.getItemViewType(position)) { case 0: HolderZeroType zero = (HolderZeroType) holder; //наполняем данными разметку для нулевого типа break; case 1: HolderFirstType first = (HolderFirstType) holder; //наполняем данными разметку для нулевого типа break; } }
public static class HolderFirstType extends RecyclerView.ViewHolder { ...
public ViewHolderText(View v) { super(v); ... } }
public static class HolderZeroType extends RecyclerView.ViewHolder { ...
public ViewHolderText(View v) { super(v); ... } }

Комментариев нет:

Отправить комментарий