update - Force RecyclerView para volver a dibujar Android
recyclerview update item (4)
¡Encontré la respuesta! La forma correcta de hacer esto es:
recyclerView.setAdapter(null);
recyclerView.setLayoutManager(null);
recyclerView.setAdapter(myAdapter);
recyclerView.setLayoutManager(myLayoutManager);
myAdapter.notifyDataSetChanged();
¡Después de eso, todos los artículos obtienen el nuevo estilo!
¿Hay alguna forma de volver a dibujar todos los elementos de RecyclerView
?
Tengo algunos temas (en style.xml) y después de cambiar el tema, necesito que se RecyclerView
a dibujar RecyclerView
.
Por lo tanto, quiero un método que obligue a volver a llamar onCreateViewHolder
para cada elemento del adaptador.
Lo intenté:
- llame a
adapter.notifyDataSetChanged
pero no se llama aonCreateViewHolder
- llame a
recyclerView.setVisibility(View.GONE)
y luegorecyclerView.setVisibility(View.VISIBLE)
- llama a
recyclerView.invalidate()
- llama a
recyclerView.setAdapter(null)
y luegorecyclerView.setAdapter(adapter)
.
Esto funciona bien para el 90% de los artículos. Solo el 90% de los artículos obtendrán el nuevo estilo, pero algunos artículos tendrán el estilo antiguo
Menciono que el RecyclerView
está adjunto a una Actividad, no a un Fragmento.
Si desea forzar el redibujado, necesita un conjunto de vistas claro de RecycleView
. Puede usar recyclerView.getRecycledViewPool().clear();
Las siguientes líneas de código hicieron el truco para mí
recyclerview.swapAdapter(myAdapter,false);
recyclerview.setLayoutManager(myLayoutManager);
myAdapter.notifyDataSetChanged();
Mire esta respuesta: https://.com/a/33342314/4142087
En breve, puede crear diferentes tipos de titulares de vista, cambiar el tipo de vista obligará a RecyclerView a pasar otro ViewHolder
al onBindViewHolder
.
Si usa setTheme
, debe recrear toda la actividad de esta manera: https://.com/a/14367214/4142087