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.