El adaptador de RecyclerView notifyDataSetChanged no funciona

Yo extendí

RecyclerView.Adapter<RecyclerView.ViewHolder> 

Y cuando llamé:

 mRecyclerView.getAdapter().notifyDataSetChanged(); 

No pasó nada.

La única manera de actualizar la vista es volver a configurar el adaptador ( ver esta respuesta ):

 mRecyclerView.setAdapter(new MyAdapter(...)); 

Tengo dos problemas con esta solución:

  1. Puedo ver un parpadeo en la pantalla cuando vuelvo a configurar el adaptador
  2. La vista de lista vuelve a la primera posición.

¿Algunas ideas?

5 Solutions collect form web for “El adaptador de RecyclerView notifyDataSetChanged no funciona”

Si getItemCount() devuelve 0, entonces notifyDataSetChanged() no hará nada. Asegúrese de que al inicializar su adaptador, está pasando un conjunto de datos válido.

Si notifyDataSetChanged() no notifyDataSetChanged() actualizaciones de vista, es posible que se haya olvidado de llamar a SetLayoutManager() en su RecyclerView (como lo hice yo). Sólo no te olvides de hacer esto:

 var manager = new LinearLayoutManager(Context, LinearLayoutManager.Vertical, false); _list.SetLayoutManager(manager); 

Antes de llamar a SetAdapter() ;

Lo siento por código C #, estoy usando Xamarin.

De acuerdo con los javadocs: Si está escribiendo un adaptador, siempre será más eficiente utilizar los eventos de cambio más específicos, si es posible. Confíe en notifyDataSetChanged() como último recurso.

 public class NewsAdapter extends RecyclerView.Adapter<...> { private static List mFeedsList; ... public void swap(List list){ if (mFeedsList != null) { mFeedsList.clear(); mFeedsList.addAll(list); } else { mFeedsList = list; } notifyDataSetChanged(); } 

Estoy utilizando Retrofit para obtener la lista, en el uso onResponse () de Retrofit,

 adapter.swap(feedList); 

Quiero compartir algo, yo estaba enfrentando el mismo problema. Pero lo que estaba haciendo mal fue. Estaba creando la instancia del adaptador cada vez que nuevo y que haciendo notificysetDatachange () a esa nueva instancia no la más vieja.

Por lo tanto, asegúrese de que el adaptador a quien notificysetDatachange () debería ser uno más antiguo. La esperanza debajo del ejemplo ayuda.

  MyAdapter mAdapter = new MyAdapter(...) mRecyclerView.setAdapter(mAdapter ); // TODO mAdapter.modifyData(....); mAdapter.notifySetDataChange(); MyAdapter extends baseAdapter { MyAdapter () { } modifyData(String[] listData) { } } 

NotifyDataSetChanged () sholud se llama en el hilo principal.

  • RecyclerView.onBindViewHolder sólo se llama una vez
  • Android RecyclerView: Cambiar archivo de diseño LIST a GRID onOptionItemSelected
  • Contenido dinámico dentro de una lista en Android
  • Detectar acabado de animación en RecyclerView de Android
  • RecyclerViewAdapter.notifyDataSetChanged () en una referencia de objeto nulo
  • Expanda CardView dentro de RecyclerView como nueva actividad como Inbox de Google Android
  • Recyclerview (Obtener elemento en Recyclerview)
  • Animación de transición de llamada desde RecyclerView Adapter en lugar de Actividad
  • RecyclerView no llama aCreateViewHolder o onBindView
  • Rendimiento extremadamente Laggy RecyclerView
  • Google Maps Lite Mode causa jank en RecyclerView
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.