2015-10-08 14 views
9

Sto usando un RecyclerView, aggiungo elementi prima del primo elemento, la posizione di scorrimento si sposta fino al nuovo primo elemento aggiunto. Come posso mantenere la posizione di scorrimento dopo aver aggiunto nuovi elementi al primo indice e chiamare notifydatasetchange()?Come rimanere in una posizione di scorrimento in RecyclerView dopo aver aggiunto elementi al suo primo indice e chiamare notifydatasetchange

questo è quello che faccio nel mio adattatore

mCurrentFragment.items.addAll(0, createLineItems(dataArrayList)); 

    notifyDataSetChanged(); 

Qualche suggerimento?

+0

si può calcolare dalla quantità degli oggetti che si è inserito e impostare il valore di scorrimento manualmente – filipproch

+0

ok cercherò, thx – eddykordo

risposta

20

ci sono due opzioni:

  1. utilizzare le versioni più sofisticate di notify

    List newData = createLineItems(dataArrayList); 
    mCurrentFragment.items.addAll(0, newData); 
    notifyItemRangeInserted(0, newData.size()); 
    
  2. Utilizzare gli ID stabili. Sull'adattatore ignorare public long getItemId (int position) per restituire valori SIGNIFICATIVI e chiamare setHasStableIds(true); su di esso.

+0

prima opzione funziona per me, thx per aiuto – eddykordo

+0

@Budius Che cosa si intende per significativo? significa un ID univoco relativo a ciascun oggetto? –

+0

@HamzehSoboh Intendevo esattamente quello. Se i tuoi ID sono solo la posizione (per esempio) non funzionerà. Deve essere (ad esempio) l'ID utente o l'ID foto, quindi quando la posizione delle viste cambia l'ID rimane limitato ai dati – Budius