Я реализую представление ресайклера с двумя типами ViewHolder. После создания первого элемента в качестве держателя представления первого типа у меня есть список элементов того же второго типа. Теперь я хотел бы сопоставить элементы второго типа, чтобы определить список просмотра ресайклера из двух столбцов с учетом второго типа. Возможно ли это сделать? Я понятия не имею, что должно быть реализовано в адаптере, и, честно говоря, я не нашел здесь хороших предложений. Я предполагаю, что могу не публиковать свой код адаптера, так как я не знаю, возможно ли сделать то, к чему я стремлюсь, я надеюсь, что концептуального ответа тоже может быть достаточно. У меня есть изображение, сделанное не очень хорошим графическим редактором моего смартфона, надеюсь понятно:
Я не знал, что мы можем вкладывать RecyclerView(s). Я собираюсь искать хорошее решение, и если я не могу его найти, я был бы признателен за любые усилия, чтобы помочь мне. В этом случае я бы опубликовал свой (очень простой) код адаптера
Я опоздал, но я нашел решение. Я связываю с 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 — две статические конечные переменные.
То, что вы ищете, - это Recyclerview с вложенным Recyclerview.