Ho un RecyclerView
che si trova all'interno di un CardView
. Lo CardView
ha un'altezza di 500 dpi, ma desidero abbreviare questa altezza se lo RecyclerView
è più piccolo. Quindi mi chiedo se ci sia un listener chiamato quando lo RecyclerView
ha terminato la posa dei suoi articoli per la prima volta, rendendo possibile impostare l'altezza dello RecyclerView
sull'altezza dello CardView
(se inferiore a 500dp).Come sapere quando RecyclerView ha terminato la posa degli articoli?
risposta
Avevo anche bisogno di eseguire il codice dopo che la mia vista del riciclatore ha finito di gonfiare tutti gli elementi. Ho provato a verificare in onBindViewHolder
nel mio adattatore, se la posizione era l'ultimo, e quindi ha notificato l'osservatore. Ma a quel punto, la vista del riciclatore non era ancora completamente popolata.
come RecyclerView strumenti ViewGroup
, this anwser è stato molto utile. Hai semplicemente bisogno di aggiungere un OnGlobalLayoutListener al recyclerView:
View recyclerView=findViewById(R.id.myView);
recyclerView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
//At this point the layout is complete and the
//dimensions of recyclerView and any child views are known.
}
});
Quello che ha funzionato per me è stato quello di aggiungere il listener dopo aver impostato l'adattatore RecyclerView.
ServerRequest serverRequest = new ServerRequest(this);
serverRequest.fetchAnswersInBackground(question_id, new AnswersDataCallBack()
{
@Override
public void done(ArrayList<AnswerObject> returnedListOfAnswers)
{
mAdapter = new ForumAnswerRecyclerViewAdapter(returnedListOfAnswers, ForumAnswerActivity.this);
recyclerView.setAdapter(mAdapter);
recyclerView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener()
{
@Override
public void onGlobalLayout()
{
progressDialog.dismiss();
}
});
}
});
Questa congeda il "progressDialog" dopo lo stato di layout globale o la visibilità di punti di vista all'interno dei cambiamenti visualizzazione ad albero.
Modifica di lavoro di @andrino anwser.
Come @Juancho ha indicato nel commento sopra. Questo metodo è chiamato più volte. In questo caso, vogliamo che venga attivato solo una volta.
Creato listener personalizzato con un'istanza per esempio
private RecyclerViewReadyCallback recyclerViewReadyCallback;
public interface RecyclerViewReadyCallback {
void onLayoutReady();
}
Quindi impostare OnGlobalLayoutListener
sul RecyclerView
recyclerView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
if (recyclerViewReadyCallback != null) {
recyclerViewReadyCallback.onLayoutReady();
}
recyclerView.getViewTreeObserver().removeOnGlobalLayoutListener(this);
}
});
dopo che avete solo bisogno di implementare listener personalizzato con il codice
recyclerViewReadyCallback = new RecyclerViewReadyCallback() {
@Override
public void onLayoutReady() {
//
//here comes your code that will be executed after all items has are laid down
//
}
};
ho stato alle prese con il tentativo di rimuovere OnGlobalLayoutListener
una volta attivato ma che lancia un IllegalStateException
. Dal momento che quello che mi serve è quello di scorrere la mia recyclerView al secondo elemento quello che ho fatto è stato quello di verificare se già avere figli e se è la prima volta che questo è vero, solo allora mi fare il rotolo:
public class MyActivity extends BaseActivity implements BalanceView {
...
private boolean firstTime = true;
...
@Override
protected void onCreate(Bundle savedInstanceState) {
...
ViewTreeObserver vto = myRecyclerView.getViewTreeObserver();
vto.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
if (myRecyclerView.getChildCount() > 0 && MyActivity.this.firstTime){
MyActivity.this.firstTime = false;
scrollToSecondPosition();
}
}
});
}
...
private void scrollToSecondPosition() {
// do the scroll
}
}
HTH qualcuno!
(Naturalmente, questo è stato ispirato alle risposte @andrino e @Phatee)
- 1. Come posso sapere quando MKMapview setRegion: animated: ha terminato?
- 2. Griglia RecyclerView con diverse dimensioni degli articoli
- 3. Come sapere quando MediaRecorder ha terminato la scrittura dei dati su file
- 4. Rileva clic su RecyclerView al di fuori degli articoli
- 5. Come sapere se il cliente ha terminato in zoccoli
- 6. RecyclerView ItemTouchHelper Azione Trascinamento terminato
- 7. Come limitare la visibilità degli articoli?
- 8. Come può sapere il mio codice quando Firebase ha terminato il recupero dei dati?
- 9. AVPlayerItemDidPlayToEndTimeNotification viene pubblicato quando l'elemento non ha terminato la riproduzione
- 10. Come contare gli articoli RecyclerView con Espresso
- 11. articoli RecyclerView duplicati e in continuo cambiamento
- 12. più articoli RecyclerView in uno CardView
- 13. articoli centro orizzontalmente in RecyclerView (utilizzando GridLayoutManager)
- 14. Come disabilitare il disegno della decorazione di un oggetto RecyclerView per la durata delle animazioni degli articoli
- 15. android recyclerview non visualizza gli articoli
- 16. Come estendere la Nutch per lo strisciante degli articoli
- 17. Rileva quando WKWebView ha terminato di caricare OGNI volta
- 18. articoli non sono la stessa larghezza quando si utilizza RecyclerView GridLayoutManager fare spaziatura colonna ItemDecoration
- 19. Come nascondere la barra degli strumenti in un ViewPager quando si utilizza Scrolling RecyclerView?
- 20. Come specificare l'ordine degli articoli in ReactCSSTransitionGroup?
- 21. Come sapere quando l'oggetto AudioTrack ha finito di suonare?
- 22. Come sapere quando il viewpager ha finito di caricare
- 23. ALSA: Come sapere quando un suono ha finito di suonare
- 24. Android: come posso sapere quando gridview ha raggiunto il fondo?
- 25. Rileva quando BaseAdapter.notifyDataSetChanged() è terminato
- 26. Come si rileva quando l'audio HTML5 ha terminato la riproduzione (più di una volta)?
- 27. Come sapere quando un CompletionService ha finito di fornire risultati?
- 28. Jquery, come sapere quando l'input ha un: selettore non valido?
- 29. LayoutManager per RecyclerView per impostare automaticamente il numero di colonne in base alla larghezza degli articoli
- 30. come rilevare quando MotionEvent.ACTION_MOVE è terminato
Trovato qualcosa? Ne ho davvero bisogno anch'io. – Magnas
Correlati: http://stackoverflow.com/questions/32496681/how-to-know-when-data-is-loaded-inside-custom-recyclerview –