Есть ли способ заполнить строку RecyclerView несколькими объектами ViewHolder? Что должен реализовать адаптер?

Я реализую представление ресайклера с двумя типами ViewHolder. После создания первого элемента в качестве держателя представления первого типа у меня есть список элементов того же второго типа. Теперь я хотел бы сопоставить элементы второго типа, чтобы определить список просмотра ресайклера из двух столбцов с учетом второго типа. Возможно ли это сделать? Я понятия не имею, что должно быть реализовано в адаптере, и, честно говоря, я не нашел здесь хороших предложений. Я предполагаю, что могу не публиковать свой код адаптера, так как я не знаю, возможно ли сделать то, к чему я стремлюсь, я надеюсь, что концептуального ответа тоже может быть достаточно. У меня есть изображение, сделанное не очень хорошим графическим редактором моего смартфона, надеюсь понятно:

Есть ли способ заполнить строку RecyclerView несколькими объектами ViewHolder? Что должен реализовать адаптер?

То, что вы ищете, - это Recyclerview с вложенным Recyclerview.

Zach Bublil 18.04.2019 14:54

Я не знал, что мы можем вкладывать RecyclerView(s). Я собираюсь искать хорошее решение, и если я не могу его найти, я был бы признателен за любые усилия, чтобы помочь мне. В этом случае я бы опубликовал свой (очень простой) код адаптера

tom 18.04.2019 14:57
0
2
77
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я опоздал, но я нашел решение. Я связываю с recyclerview GridLayoutManager с span count = 2. Поскольку в верхней части recyclerview у меня есть EditText (я использую его как панель поиска), как вы можете видеть на изображении, мне нужно настроить поиск сетки. Это делается с помощью setSpanSizeLookup(). Итак, в методе onViewCreated() моего класса фрагмента, который инициализирует recyclerview (у меня есть фрагмент, на котором размещен recyclerview), я вставляю следующий код:

GridLayoutManager gridLayoutManager = new GridLayoutManager(getContext(), 2);
    gridLayoutManager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {
        @Override
        public int getSpanSize(int position) {
            int type = adapter.getItemViewType(position);
            if (type == RecyclerAdapter.SEARCH)
                return 2;
            else
                return 1;
        }
    });

recyclerView.setLayoutManager(gridLayoutManager);

где часть "if (type == RecyclerAdapter.SEARCH) return 2;" означает, что держатель представления для панели поиска будет занимать одну целую строку, 2 ячейки сетки (поскольку диапазон = 2).

В моем адаптере recyclerview необходим метод getItemViewType:

@Override
public int getItemViewType(int position) {
    if (position == 0)
        return SEARCH;
    else
        return DESCRIPTION;
}

где SEARCH и DESCRIPTION — две статические конечные переменные.

Другие вопросы по теме