RecyclerView: finden Letzte sichtbare Objekt sofort nach Ansicht erstellt

Ich habe ein problem mit einer der folgenden Methoden:

int firstVisibleItemPosition = gridLayoutManager.findFirstVisibleItemPosition();
int lastVisibleItemPosition = gridLayoutManager.findLastVisibleItemPosition();

Mein Ziel: speichern analytische Daten darüber, welche Elemente dem Benutzer angezeigt haben.

Damit zu tun, dass, rufe ich diese Methoden in zwei verschiedenen Szenarien:

  • jedes mal, wenn scrollen aktiviert, um den "Leerlauf" - Zustand, und zu prüfen, was sind die sichtbaren Elemente. in diesem Fall bin ich immer die erwarteten Indizes.
  • wenn die RecyclerView "sichtbar" für den Benutzer.
    nun, das ist, wenn das problem beginnt. Ich würde erwarten, dass, wenn das fragment mit der recylcerView übergeben onResume() dann ruft findLastVisibleItemPosition() zurück, die sichtbaren Elemente. aber es -1 zurück, in diesem Fall. Ich denke, Sie haben etwas zu tun mit dem asynchronen laden der recyclerView + adapter-interne Elemente der Initialisierung relativ zu dem fragment/activity lifecycle.

durch verschieben dieser code von ein paar Millisekunden - findLastVisibleItemPosition() gibt die richtigen Indizes. aber ich will nicht zu verschieben ist hart codiert mit hf + verzögert ausführbar, weil Planung verzögert ausführbar " ist ein work-around zu dem, was ich wirklich tun will: erkennen, Wann der recycler Ansicht fertig aufblasen und zeichnen auf dem Bildschirm alle sichten, die Füße nach innen von ihm..

also meine Fragen sind im Grunde:

  • wie kann ich erkennen, Wann die RecyclerView beendet alle initialzation/mess - /aufblasen und Zeichnung der es untergeordnete Elemente, die Füße in den Bildschirm? (vor der Benutzer-Interaktion..).
  • gibt es eine zuverlässige gute Praxis Weg, genau zu wissen, welche Elemente innerhalb des " recycler Blick ist wirklich auf dem Bildschirm angezeigt?
Hi, hast du eine verlässliche Antwort nach diesem post, @Tal-Kanel? Ich bin eine Art, die mit ähnlichen Problemen.
meine Lösung ist die Ausführung des code-Kontrolle für die erste sichtbare Element aus einem Thread als post, die durch einen handler im UI thread (nicht verzögert ..). Der Grund, warum es ausgeführt wird, auf dem Ende der UI-queue, die aus meiner Erfahrung passiert, nachdem der Blick bereits mit dem recycler anzeigen

InformationsquelleAutor Tal Kanel | 2015-07-10

Schreibe einen Kommentar