Есть ли способ заполнить строку RecyclerView более чем одним объектом ViewHolder? Что должен реализовывать адаптер? - PullRequest
0 голосов
/ 18 апреля 2019

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

enter image description here

1 Ответ

0 голосов
/ 07 мая 2019

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

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 ячейки сетки (так как span = 2).

В моем адаптере для повторного просмотра крайне важен метод getItemViewType:

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...