quando chiama notifyDataSetChanged
su RecyclerView
non mantiene la posizione di scorrimento e scorre verso l'alto, c'è qualche soluzione per mantenere la posizione di scorrimento?RecyclerView notifyDataSetChanged scorre nella posizione superiore
risposta
È possibile utilizzare swapAdapter() e dopo la chiamata notifyDataSetChange(). Questo funziona per me.
Non sono sicuro se questo risolve il problema, ma stavo avendo lo stesso problema ed era perché stavo chiamando setAdapter dopo la notifica. Quindi, non chiamare setAdapter dopo la notifica ha risolto il problema.
mAdapter.notifyItemRangeInserted(mAdapter.getItemCount(), list.size() - 1);
recyclerView.setAdapter(); // remove this line.
//Do this only when you're setting the data for the first time or when adapter is null.
Grazie, è lavoro –
Se l'elemento della lista RecyclerView genitore ha proprietà "wrap_content", Recyclerview calcola le altezze di nuovo e scorre in alto.
ci sono due soluzioni:
- impostare l'altezza di un valore costante come questa:
layout_height="100dp"
Usa StaggeredGridLayoutManager come questo:
mRecyclerView.setLayoutManager(new StaggeredGridLayoutManager(1, StaggeredGridLayoutManager.VERTICAL));
se si desidera cambia elementi con animazioni, usa il metodo notifyItemChanged in Fragm ent o Attività. Non in classe Adapter:
mRecyclerView.getAdapter().notifyItemChanged(position);
La seconda soluzione è più efficiente e vi suggerisco questo uno
Sì, la vista Recycler calcola l'altezza in caso di "wrap_content", quindi la correzione sta impostando l'altezza del layout fissa o l'altezza su "match_parent". – anp8850
RecycleViews scorreranno torna su qualsiasi variante di notifyDataSetChanged
se non hanno un gestore di layout. Ecco un esempio di come impostarne uno.
recycleView.setLayoutManager(new LinearLayoutManager(context, OrientationHelper.VERTICAL, false));
Come sto indovinando, quello che stai facendo è resettare l'adattatore al RecyclerView
e quindi chiamando notifyDataSetChanged().
È necessario passare solo la dataList
all'adattatore passando dataList
nel metodo adattatore come adattatore update(dataList)
. E in questo metodo è possibile assegnare questo elenco alla lista degli adattatori come;
public void update(ArrayList<Hashmap<String,String> list){
this.mList = list;
}
si può mantenere la posizione, salvando prima notifyDataSetChanged e quindi chiamare scorrere liscia per posizione salvata
final int currentVisibleItem = ((LinearLayoutManager) layourmanager).findFirstCompletelyVisibleItemPosition();
productListAdapter.notifyDataSetChanged();
Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
if(currentVisibleItem>-1 && currentVisibleItem<lstProducts.size())
rv_products.scrollToPosition(currentVisibleItem);
}
}, 100);
- 1. RecyclerView adattatore non notifyDataSetChanged lavoro
- 2. notifyDataSetChanged non funziona su RecyclerView
- 3. notifyDataSetChanged() aggiorna la lista e scorre indietro verso l'alto
- 4. RecyclerView scorre per terminare dopo smoothScrollToPosition (0)
- 5. RecyclerView non scorre come previsto
- 6. Come utilizzare notifyDataSetChanged() nella discussione
- 7. Posizione di mantenimento in ListView dopo aver chiamato notifyDataSetChanged
- 8. RecyclerView scorre automaticamente a WebView/Fresco SimpleDraweeView
- 9. RecyclerView che non scorre verso il basso
- 10. NestedScrollView scorre in alto su Recyclerview ridimensionato
- 11. setCurrentItem in ViewPager non scorre immediatamente nella posizione corretta
- 12. Barra di intestazione superiore con posizione fissa su iOS chrome si sposta quando si scorre
- 13. Posizione MBProgressHUD nella parte inferiore/superiore dello schermo
- 14. UITableView in iOS 7 non scorre nella posizione corretta durante la modifica di UITextView nella cella
- 15. jQuery Masonry errata posizione superiore
- 16. Ricerca dell'offset superiore del primo oggetto visibile in un RecyclerView
- 17. RecyclerView posizione errata impostata su BindViewHolder
- 18. qualcosa di strano accade mentre si scorre RecyclerView troppo veloce
- 19. UITableView non scorre nella cella
- 20. RecyclerView - Scorri verso la posizione non funziona ogni volta
- 21. Un DIV che rimane nella parte superiore mentre scorre una pagina Web
- 22. UITableView scorre verso l'alto quando si tocca la barra di stato nella parte superiore dello schermo
- 23. notifyDataSetChanged esempio
- 24. Android notifyDataSetChanged
- 25. Posizione CSS: assoluto con posizione: relativo "superiore" non funzionante
- 26. RecyclerView - Visualizza in una posizione particolare
- 27. Arresta utente per impostare posizione su RecyclerView
- 28. Collega TextView a RecyclerView
- 29. Crea scorrimento NavBar nella parte superiore del browser in Bootstrap
- 30. Foundation 5 - posizione superiore di reveal modal
Hai trovato qualche soluzione? –
** NON chiamare ** 'notifyDataSetChanged()' su 'RecyclerView'. Usa i nuovi metodi come 'notifyItemChanged()', 'notifyItemRangeChanged()', 'notifyItemInserted()', ecc ... –
Ho provato notifyItemRangeInserted(), ma anche quello scorre verso l'alto. Qualche idea? –