El adaptador de RecyclerView notifyDataSetChanged no funciona
Yo extendí
RecyclerView.Adapter<RecyclerView.ViewHolder>
Y cuando llamé:
- Obtener el elemento seleccionado y su posición en RecyclerView
- Horizontal RecyclerView interior vertical ScrollView
- FirebaseRecyclerAdapter y multiplicar tipos de elementos en android
- ¿Cómo puedo hacer que WRAP_CONTENT funcione en un RecyclerView
- Android setOnScrollListner en RecyclerView obsoleta
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:
- Puedo ver un parpadeo en la pantalla cuando vuelvo a configurar el adaptador
- La vista de lista vuelve a la primera posición.
¿Algunas ideas?
- ¿Cómo utilizar ItemAnimator en un RecyclerView?
- RecyclerView horizontal con relleno inicial
- Android RecyclerView desplazamiento suave para ver que está animando su altura
- Cómo importar RecyclerView para Android L-preview
- Eliminar los efectos de desplazamiento de RecyclerView
- Android Visualización de datos de json a cardview en RecyclerView
- Transición de elementos compartidos de Android entre fragmentos con vista de reciclaje y detalles
- Creación de un RecyclerView ampliable
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.
- No se puede construir el proyecto para iOS desde cordova cli
- Error al iniciar la primera aplicación de prueba: Android Packaging Problem?