Выделить несколько столбцов с помощью RecyclerView

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

Я использую RecyclerView.Adapter с помощью StaggeredGridLayoutManager. Не похоже, что это из коробки функциональность. Я предполагаю, что могу создать собственный менеджер макетов, я просто не знаю, с чего начать. Я попытался выполнить поиск, но я не могу найти ничего о том, как получить элементы для размещения нескольких столбцов.

Ниже приведено то, что я ищу в списке.

Staggered layout

Ответ 1

В настоящее время StaggeredGridLayoutManager поддерживает только представления, которые охватывают все столбцы (для вертикально настроенного макета), а не произвольное число из них.

Если вы все же хотите охватить их по всем столбцам, вы должны сделать это в реализации адаптера:

public final void onBindViewHolder(RecyclerView.ViewHolder viewHolder, int position) {

    StaggeredGridLayoutManager.LayoutParams layoutParams = (StaggeredGridLayoutManager.LayoutParams) viewHolder.itemView.getLayoutParams();
    layoutParams.setFullSpan(true);
}

IMHO, StaggeredGridLayoutManager все еще находится в тяжелом развитии, и Google хочет, чтобы мы использовали его для обратной связи: (

Ответ 2

То, что я сделал для охвата всех столбцов для вертикально настроенного макета, это создать новый LayoutParams и установить полный диапазон в true в реализации адаптера:

@Override
public void onBindViewHolder(final RecyclerView.ViewHolder viewHolder, int position) {

    StaggeredGridLayoutManager.LayoutParams layoutParams = new StaggeredGridLayoutManager.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
    layoutParams.setFullSpan(true);
    viewHolder.itemView.setLayoutParams(layoutParams);
}