Выделить несколько столбцов с помощью 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);
}