Установите диапазон для элементов в GridLayoutManager, используя SpanSizeLookup

Я хочу реализовать grid-подобный макет с заголовками разделов. Подумайте о https://github.com/TonicArtos/StickyGridHeaders

Что я делаю сейчас:

mRecyclerView = (RecyclerView) view.findViewById(R.id.grid); mLayoutManager = new GridLayoutManager(getActivity(), 2); mLayoutManager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() { @Override public int getSpanSize(int position) { switch(mAdapter.getItemViewType(position)){ case MyAdapter.TYPE_HEADER: return 1; case MyAdapter.TYPE_ITEM: return 2; default: return -1; } } }); mRecyclerView.setLayoutManager(mLayoutManager); 

Теперь как обычные элементы, так и заголовки имеют размер диапазона 1. Как я могу это решить?

Solutions Collecting From Web of "Установите диапазон для элементов в GridLayoutManager, используя SpanSizeLookup"

Проблема заключалась в том, что заголовок должен иметь размер диапазона 2, а обычный элемент должен иметь размер диапазона 1. Таким образом, правильные реализации:

 mLayoutManager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() { @Override public int getSpanSize(int position) { switch(mAdapter.getItemViewType(position)){ case MyAdapter.TYPE_HEADER: return 2; case MyAdapter.TYPE_ITEM: return 1; default: return -1; } } }); 

Заголовок должен иметь интервал, равный числу отсчетов по всему списку.

 mLayoutManager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() { @Override public int getSpanSize(int position) { switch(mAdapter.getItemViewType(position)){ case MyAdapter.TYPE_HEADER: return mLayoutManager.getSpanCount(); case MyAdapter.TYPE_ITEM: return 1; default: return -1; } } }); 

Ответьте на мой вопрос: переопределите getSpanSizeLookup () из Activity после настройки адаптера.