support library last android android-support-library android-recyclerview gridlayoutmanager

library - com.android.support:design 26



Establecer el intervalo para los elementos en GridLayoutManager usando SpanSizeLookup (3)

El encabezado debe tener un intervalo igual al recuento de intervalos de toda la lista.

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; } } });

Quiero implementar un diseño de cuadrícula con encabezados de sección. Piense en https://github.com/TonicArtos/StickyGridHeaders

Qué hago ahora:

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);

Ahora, tanto los elementos normales como los encabezados tienen un tamaño de intervalo de 1. ¿Cómo resuelvo esto?


El problema era que el encabezado debería tener un tamaño de intervalo de 2, y el elemento normal debería tener un tamaño de intervalo de 1. Entonces, las implementaciones correctas son:

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; } } });


Responda a mi propia pregunta: anule getSpanSizeLookup () de la actividad después de configurar el adaptador.