fckertube.com

  

Beste Artikel:

  
Main / Onbindviewholder hat mich nie zurückgerufen

Onbindviewholder hat mich nie zurückgerufen

Anmerkung des Autors: Ich habe den Titel geändert, aber nicht den Inhalt dieses Beitrags, da ich der Meinung bin, dass das Löschen von Fehlern weniger wertvoll ist, als mich dafür zu entschuldigen. Also lass mich das hier machen. Ich entschuldige mich für mein Können in diesem Beitrag. Ich bereue es und habe daran gearbeitet, ableist Sprache aus meinem Wortschatz zu entfernen.

Dies sind dumme ViewHolders. Sie wissen nichts über die Daten, die sie anzeigen. Sie wissen nichts darüber, wie Benutzer mit den Daten interagieren können. Sie wissen nichts darüber, wie sie mit Code um sie herum kommunizieren sollen. Aber sie können noch viel mehr! Sie können nicht dumm sein!

Der beste Weg, um diesen Paradigmenwechsel zu bewältigen, ist das Beispiel. Einige dienen zur Anzeige, andere zum Bau von Uris. Die vollständige Datenmodellklasse finden Sie in dieser Übersicht.

Jetzt ist unser DumbViewHolder wirklich einfach. Wahrscheinlich zu einfach. Der einzige Zweck besteht darin, alle diese findViewById-Aufrufe nicht in unserem Adapter zu speichern. Jetzt hat unser armer OverworkedAdapter viel zu tun. Es muss die Felder an jede einzelne Ansicht im ViewHolder binden und dann die Klickereignisse in zwei separaten Ansichten verarbeiten. Dann muss es sogar Aktivitäten starten! Neu im Adapter unten ist DiffUtil. Eine sehr wichtige Sache ist jedoch, dass es zwar wie ein asynchroner Rückruf aussieht, dies aber nicht ist.

In diesem Beispiel verarbeitet und benachrichtigt DiffUtil den Hauptthread und blockiert ihn, bis er fertig ist. Wenn Ihre Liste sehr groß ist, kann die Berechnung lange dauern. In diesem Fall sollten Sie berechneDiff in einem Hintergrundthread aufrufen. Wenn die Berechnung abgeschlossen ist und ein DiffResult zurückgibt, können Sie Ihre Adapterdaten aktualisieren und Änderungen im Hauptthread senden. Alles klar! Wie können wir also den Zusammenhalt dieser Klassen verbessern? Erstellung und Bindung sind separate Schritte.

Das macht unseren Adapter etwas einfacher, aber nicht viel. Wir können es besser machen. Das ist besonders schön. Wir können die onClickListener einmal im Konstruktor festlegen und nicht immer wieder zur Bindezeit. Wir können ein paar Mikrosekunden für jede Bindung sparen und uns dem perfekt ruckfreien Scrollen ein Stück näher bringen. Nur wenn Ihre Benutzer schneller klicken können als Ihr Adapter, ist eine Bindung unwahrscheinlich. Sie sehen, die onClick-Methoden werden erst ausgewertet, wenn der Benutzer auf die Ansicht klickt.

Zu diesem Zeitpunkt wird setItem aufgerufen sein und wir werden Daten haben, mit denen wir arbeiten können. Schauen Sie, wie kurz dieser Adapter jetzt ist! Unser ganzer Adapter in nur 70 Zeilen. Schließen Sie mit Animationen ab, wenn Elemente gelöscht, eingefügt oder geändert werden. Das ist schon großartig. Wir können die Dinge noch weiter verbessern, indem unser ViewHolder eine Schnittstelle definiert, die die Aktivität oder das Fragment implementieren kann, und der Adapter an den ViewHolder übergeben kann.

Jetzt können wir die Aktivität entscheiden lassen, was mit den Informationen geschehen soll, anstatt sich immer um den ViewHolder oder Adapter kümmern zu müssen. Möglicherweise haben wir in unserem Tablet-Layout ein Kartenfragment in einem separaten Bereich, und wir möchten dieses aktualisieren, anstatt Google Maps direkt zu starten, wenn auf das Kartensymbol geklickt wird. Dann benötigt unser Adapter nur einen aktualisierten Konstruktor, damit er den Listener passieren kann.

Dies ist ein Smart ViewHolder. Dies funktioniert wunderbar mit einem einfachen Fall wie diesem, aber es scheint wirklich, wenn Sie einen sehr komplexen Datensatz mit verschiedenen Typen haben, die unterschiedliche Ansichten und unterschiedliche Benutzerinteraktionen haben.

Jeder Typ kann einen separaten ViewHolder haben, und jeder ViewHolder weiß, wie seine Daten angezeigt werden und wie Klickereignisse in der Kette übergeben werden. Darüber hinaus kann sich Ihr Adapter auf das konzentrieren, was er am besten kann: Er kann das gesamte Element an den jeweiligen ViewHolder übergeben und es einen Tag lang aufrufen. Oh und noch eine Sache. Eine weitere wirklich großartige Sache, die Sie jetzt tun können, ist die Wiederverwendung Ihrer ViewHolders. Möglicherweise haben Sie einige verschiedene Aktivitäten, die dieselben Datentypen anzeigen, jedoch in unterschiedlichen Formaten.

Dieser ViewHolder kann doppelte Aufgaben ausführen, solange er über dieselben Ansichts-IDs verfügt, mit denen er arbeiten kann. Schauen Sie sich hier den fertigen Code an. Jon F. Hancock. Anmelden Erste Schritte. 29. November 2016. Verpassen Sie niemals eine Geschichte von Jon F. Hancock, wenn Sie sich für Medium anmelden. Mehr erfahren. Updates abrufen Updates abrufen.

(с) 2019 fckertube.com