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?

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 item layout_weight, tamaños no actualizados
  • Manejar el artículo con un clic largo en la vista del reciclador
  • Recylerview no visible dentro de scrollview o nestedScrollview
  • Cómo implementar gridlayoutmanager horizontal
  • Los datos del adaptador RecycleView aparecen erróneos al desplazarse demasiado rápido
  • Datos de carga de Firebase dinámicamente en desplazamiento
  • Android RecyclerView que se encuentra en un fragmento que se encuentra en un ViewPager no vuelve a cargar / refrescar las vistas si se alcanza el setOffscreenPageLimit
  • ¿Por qué ListView y RecyclerView son focusableInTouchMode?
  • Error: El hijo especificado ya tiene un padre. Debe llamar a removeView () en el padre del niño primero
  • Animación de transición de llamada desde RecyclerView Adapter en lugar de Actividad
  • Las vistas devuelven NullPointerException en onBindViewHolder en RecyclerView Adapter
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.