Ci sono diversi modi per ottenere questo risultato, ma un modo sarebbe quello di utilizzare onBindViewHolder
il metodo di scheda:
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
if (position == mData.length - 1) {
// load more data here.
}
/// binding logic
}
Quando il metodo bind viene chiamato con l'ultima posizione della vostra fonte di dati, questo è un buon indica che l'ultima cella sta per essere visualizzata e un buon momento per attivare una chiamata di ricarica. Potrebbe essere necessario aggiungere ulteriori salvaguardie alla condizione per assicurarsi che non stia già caricando più dati, ma questo dovrebbe aiutarti a iniziare.
Un'altra opzione comporterebbe la modifica del LayoutManager
. L'idea qui è di trovare la posizione dell'ultimo oggetto visibile. Se quella posizione è uguale all'ultima voce del set di dati, devi attivare una ricarica. Questa chiamata dovrebbe essere fatto nei tuoi LayourManager's
onLayoutChildren
& scrollVerticallyBy
(a patto di utilizzare scorrimento verticale) metodi:
@Override
public int scrollVerticallyBy(int dy, RecyclerView.Recycler recycler, RecyclerView.State state) {
final int result = super.scrollVerticallyBy(dy, recycler, state);
if (findLastVisibleItemPosition() == mData.length - 1) {
loadMoreData();
}
return result;
}
@Override
public void onLayoutChildren(RecyclerView.Recycler recycler, RecyclerView.State state) {
super.onLayoutChildren(recycler, state);
if (findLastVisibleItemPosition() == mData.length - 1) {
loadMoreData();
}
}
stessa di prima, è necessario assicurarsi di non innescare un carico di dati più di una volta, poiché è possibile questa condizione si verificherà più di una volta.
Spero che questo aiuti!
fonte
2016-01-26 09:42:02
use 'android.support.v7.widget.RecyclerView.OnScrollListener' – pskink
Conosco il listener di scroll ma il mio problema si verifica quando l'utente elimina tra gli elementi quindi come faccio a sapere se il mio ultimo elemento della lista è diventato visibile così posso aggiornare l'elenco o effettuare una chiamata al servizio web? –
quindi utilizzare 'onBindViewHolder', quindi – pskink