Establecer el intervalo de elementos en GridLayoutManager mediante SpanSizeLookup
Quiero implementar el diseño de cuadrícula con cabeceras de sección. Piense en https://github.com/TonicArtos/StickyGridHeaders
Qué hago ahora:
- Eliminar los efectos de desplazamiento de RecyclerView
- Recyclerview con fondo de desplazamiento
- Transición de RecyclerView a ViewPager
- El evento RecyclerView onScrollStateChanged / onScrolled no se activa cuando no se ha producido desplazamiento
- Barra de herramientas dejando espacio en blanco con ocultar en RecyclerView scroll
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 extensión de 1. ¿Cómo soluciono esto?
- ¿Hay una manera de compartir un mismo LayoutManager entre múltiples RecyclerViews anidados
- RecyclerView dentro de ScrollView no funciona
- Android 5.0 - Agregar cabecera / pie de página a un RecyclerView
- FirebaseRecyclerAdapter y multiplicar tipos de elementos en android
- NotifyDataSetChanged no funciona en RecyclerView
- Cómo crear una tarjeta CardView horizontal con RecyclerView con una sola tarjeta en la pantalla a la vez
- ¿Por qué usar estática con RecyclerView.ViewHolder
- Firebase UI RecyclerView onClick
El problema era que la cabecera debe tener el tamaño de la extensión de 2, y el artículo regular debe tener tamaño de la extensión de 1. Así que 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; } } });
Encabezado debe tener un intervalo igual a la cuenta de alcance de la lista completa.
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; } } });
Respuesta a mi propia pregunta: Anula el getSpanSizeLookup () de la actividad después de configurar el adaptador.
- ¿Cómo abrir el menú de opciones mediante programación?
- Inconsistencia al establecer el tamaño de fuente de TextView en el código y en los recursos