Il RecyclerView
, a differenza di ListView
, non ha un modo semplice per impostare una vista vuota ad esso, quindi si deve gestirlo manualmente, rendendo la vista vuota visibile in caso di conteggio degli elementi dell'adattatore è 0.Rileva l'animazione in Android RecyclerView
attuazione di questo, in un primo momento cercato di chiamare logica vista vuoto subito dopo la modifica struttura underlaying (ArrayList
nel mio caso), ad esempio:
btnRemoveFirst.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
devices.remove(0); // remove item from ArrayList
adapter.notifyItemRemoved(0); // notify RecyclerView's adapter
updateEmptyView();
}
});
Si fa la cosa, ma ha un inconveniente: quando viene rimosso l'ultimo elemento, viene visualizzata la vista vuota prima di La riparazione di rimozione è terminata, immediatamente dopo la rimozione. Così ho deciso di aspettare fino alla fine dell'animazione e quindi aggiornare l'interfaccia utente.
Con mia sorpresa, non sono riuscito a trovare un buon modo per ascoltare gli eventi di animazione in RecyclerView. La prima cosa a venire in mente è quello di utilizzare isRunning
metodo come questo:
btnRemoveFirst.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
devices.remove(0); // remove item from ArrayList
adapter.notifyItemRemoved(0); // notify RecyclerView's adapter
recyclerView.getItemAnimator().isRunning(new RecyclerView.ItemAnimator.ItemAnimatorFinishedListener() {
@Override
public void onAnimationsFinished() {
updateEmptyView();
}
});
}
});
Purtroppo, richiamata in questo caso viene eseguito immediatamente, perché in quel momento interiore ItemAnimator
ancora non è in stato di "esecuzione". Quindi, le domande sono: come utilizzare correttamente il metodo ItemAnimator.isRunning() e c'è un modo migliore per ottenere il risultato desiderato, ovvero mostra la vista vuota dopo che l'animazione di rimozione del singolo elemento è terminata?
Ehi romano. Ti è mai capitato di trovare una soluzione più centralizzata a questo problema? – Ryan
@Ryan: Purtroppo no. Ma non ho fatto ricerche su questo problema dal momento della mia risposta. –