tutorial recyclerview notifyitemremoved notifyitemchanged getitemviewtype getitemcount example android android-adapter android-recyclerview notifydatasetchanged

android - notifyitemremoved - Adaptador RecyclerView notifyDataSetChanged no funciona



recyclerview getitemcount (7)

Así que solucioné mi problema de esta manera: orderList es la lista que paso a recyclerview. Solo podemos agregar el elemento en la posición en la lista, aquí 0 es la posición 0 en la lista. Luego llame a adapter.notifyDataSetChanged (). Funciona de maravilla

1) orderList.add (0, String); 2) orderAdapter.notifyDataSetChanged ();

Extendí

RecyclerView.Adapter<RecyclerView.ViewHolder>

Y cuando llamé:

mRecyclerView.getAdapter().notifyDataSetChanged();

No pasó nada.

La única forma 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 configuro de nuevo el adaptador
  2. La vista de lista vuelve a la primera posición.

¿Algunas ideas?


De acuerdo con los javadocs: si está escribiendo un adaptador, siempre será más eficiente usar los eventos de cambio más específicos, si puede. 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 usando Retrofit para recuperar la lista, en el uso onResponse () de Retrofit,

adapter.swap(feedList);


Para actualizar recyclerview podemos hacer lo siguiente:

1. Create and set adapter again: adapter=new MyAdapter(...); mRecyclerView.setAdapter(adapter); 2. Clear model list data and then notify: ArrayList<YourModel> tempModel=new ArrayList<>(modelList); modelList.clear(); modelList.addAll(tempModel); adapter.notifyDataSetChanged();


Quiero compartir algo, me enfrentaba al mismo problema. Pero lo que estaba haciendo mal era. Estaba creando una instancia de Adapter cada vez que era nuevo y luego de hacer notifysetDatachange () para esa nueva instancia, no la anterior.

Por lo tanto, asegúrese de que el adaptador a quien notifysetDatachange () debe ser anterior. Espero que el siguiente ejemplo ayude ...

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


Si notifyDataSetChanged() no notifyDataSetChanged() actualizaciones de la vista, existe la posibilidad de que haya olvidado llamar a SetLayoutManager() en su RecyclerView (¡como lo hice yo!). Simplemente no te olvides de hacer esto:

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

antes de llamar a recyclerView.SetAdapter(adapter) ;

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


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


notifyDataSetChanged () sholud se llamará en el hilo principal.