Mit Hilfe eines ArrayAdapter mit Listview · Codepfad

Das Auffinden dieser Führer hilfreich?

Wir müssen von der größeren Gemeinschaft helfen, diese Leitlinien zu verbessern, neue Themen hinzufügen und die Themen up-to-date zu halten. Siehe unsere Beitrag Richtlinien hier und unser Thema Themen-Liste für große Möglichkeiten zu helfen.

schnell in Hochfahren auf Android Interessiert?

(Nur USA) Wenn Sie bereits ein Ingenieur mit 2 + Jahre Berufserfahrung in der Softwareentwicklung sind und ernsthaft schnell auf Android Hochfahren, sollten Sie sich für unseren kostenlosen Abend 8 Wochen Android Bootcamp bewerben.

Nicht in den Vereinigten Staaten? Bitte füllen Sie das Anwendung von Interesse Formular aus und wir werden Sie informieren, wie Klassen in Ihrer Nähe von lokalen Organisatoren angetrieben verfügbar sind.

Klonen dieses Wiki lokal

In Android Entwicklung wollen wir jederzeit eine vertikale Liste von rollbaren Elemente anzuzeigen, werden wir ein Listview verwenden, die Daten gefüllt mit einem Adapter hat. Der einfachste Adapter zu verwenden ist ein ArrayAdapter da der Adapter konvertiert eine Arraylist von Objekten in Einzelteile der Ansicht geladen in die Listview-Container genannt.

Die ArrayAdapter passt zwischen einem Arraylist (Datenquelle) und der Listview (visuelle Darstellung) und konfiguriert zwei Aspekte:

  • Welche Array als Datenquelle für die Liste zu verwenden,
  • Wie jedes gegebenes Element im Array in ein entsprechendes View-Objekt konvertieren

Beachten Sie, wie oben gezeigt, dass es andere Datenquellen neben einem ArrayAdapter wie die Cursor der stattdessen direkt zu einem Ergebnis von einer lokalen SQLite-Datenbank eingestellt bindet.

Reihen-Ansicht Recycling

Bei Verwendung eines Adapters und eines Listview. Wir müssen sicherstellen, zu verstehen, wie das Recycling funktioniert.

Wenn Ihr Listview an einen Adapter angeschlossen ist, wird der Adapter Reihen instanziiert, bis die Listview mit genügend Elemente vollständig gefüllt wurde über die volle Höhe der Liste zu füllen. Zu diesem Zeitpunkt werden keine zusätzlichen Zeile Elemente im Speicher erstellt.

Stattdessen, wenn der Benutzer blättern Sie durch die Liste, Elemente, die den Bildschirm zu verlassen, werden im Speicher für den späteren Gebrauch aufbewahrt und dann jeder neuen Zeile, die der Bildschirm tritt wieder verwendet eine ältere Reihe um im Speicher gehalten. Auf diese Weise, auch für eine Liste von 1000 Elementen, nur

7 Artikel Ansicht Zeilen werden immer im Speicher instanziiert oder gehalten. Hier ist eine visuelle Übersicht über das Recycling:

Hier ist eine andere zugehörige Diagramm auf das Recycling:

Wenden Sie sich an dieser Listview-Anleitung für einen anderen Blick auf, wie dies funktioniert, die Leistung Ihrer Listen zu optimieren. Achten Sie darauf, wie gut dieses Udacity Video auf dem Recycling zu überprüfen. Wenn Sie auswerten wollen, wie schnell Ihre Listview rendert, überprüfen Sie die Profilierungs GPU-Tool aus, das zur Visualisierung des Layouts Leistung eine grafische Art und Weise zur Verfügung stellt.

Mit einem Grund ArrayAdapter

Um einen Grund ArrayAdapter zu verwenden. Sie müssen nur den Adapter initialisieren und den Adapter an den Listview zu befestigen. Zuerst initialisieren wir den Adapter:

Nun müssen wir nur diesen Adapter zu einem Listview verbinden gefüllt werden:

Standardmäßig wird diese nun jedes Element in dem Datenfeld in einer Ansicht von konvertieren toString auf das Element aufrufen und dann die Zuordnung des Ergebnisses als den Wert eines Textview (simple_list_item_1.xml), die als die Zeile für das Datenelement angezeigt wird. Wenn die App eine komplexere Übersetzung zwischen Artikel und View erfordert, dann müssen wir stattdessen eine benutzerdefinierte ArrayAdapter erstellen.

Verwenden eines benutzerdefinierten ArrayAdapter

Wenn wir eine Reihe von Elementen in eine Liste mit einer benutzerdefinierten Darstellung der Elemente angezeigt werden sollen, müssen wir unser eigenes benutzerdefinierte XML-Layout für jedes Element verwenden. Um dies zu tun, müssen wir unsere eigene ArrayAdapter Klasse erstellen. Sehen Sie diese Repo für den Quellcode. Erstens müssen wir oft ein Modell zu definieren, um die Daten innerhalb jedes Listenelement darstellen.

Definieren des Modell

Bei einem Java-Objekt, das bestimmtes Feld hat definiert, wie eine Benutzerklasse:

Wir können eine benutzerdefinierte Listview von Benutzerobjekte erstellen, indem Subklassen ArrayAdapter zu beschreiben, wie das Objekt in einer Ansicht innerhalb dieser Klasse zu übersetzen und benutzen, um dann wie jedes andere Adapter.

Erstellen der Ansicht Vorlage

Als nächstes müssen wir ein XML-Layout erstellen, die für jedes Element in res / layout / item_user.xml die Ansichtsvorlage darstellt:

Definieren des Adapters

Als nächstes müssen wir den Adapter definieren, um den Prozess der Umwandlung des Java-Objekt auf einen Blick (in der getView-Methode) zu beschreiben. Der naive Ansatz dazu (ohne Ansicht Caching) sieht wie folgt aus:

Das Adapter hat einen Konstruktor und ein Verfahren getView (), um die Übersetzung zwischen dem Datenelement und der Ansicht angezeigt zu beschreiben.
getView () ist das Verfahren, das die aktuelle Ansicht als eine Zeile innerhalb des Listview an einer bestimmten Position verwendet zurückgibt. Ein anderes Verfahren verwendet wird, ist getItem (), die bereits in der ArrayAdapter Klasse ist und seine Aufgabe ist es, einfach das Datenelement mit der angegebenen Position in dem Datensatz zugeordnet zu bekommen, die mit diesem ArrayAdapter verbunden ist.

Anbringen des Adapters an einen Listview

Jetzt können wir diesen Adapter in der Aktivität verwenden, um ein Array von Elementen in die Listview anzuzeigen:

An diesem Punkt wird die Listview jetzt erfolgreich an die Datennutzer Array gebunden.

Bestücken von Daten in Listview

Sobald der Adapter angebracht wird, werden die Punkte automatisch in die auf den Inhalt des Arrays basierend Listview bestückt werden. Sie können neue Objekte jederzeit an den Adapter hinzufügen, mit:

die die neuen Elemente in die Liste anhängen. Sie können auch die gesamte Liste jederzeit klar mit:

Nun mit dem Adapter können Sie hinzufügen, entfernen und ändern Benutzer und die Einzelteile innerhalb der Listview automatisch alle Änderungen widerspiegeln.

Constructing Modelle aus externer Quelle

Um Modellinstanzen zu erstellen, werden Sie wahrscheinlich die Daten von einer externen Quelle werden geladen (dh Datenbank oder REST JSON API), so dass Sie zwei zusätzliche Methoden in jedem Modell erstellen sollten für den Bau einer Liste oder einen singulären Punkt, wenn das zu ermöglichen, Daten kommen von einer JSON API:

Für weitere Informationen, lesen Sie unseren Führer heraus JSON in ein Modell umgewandelt werden. Wenn Sie nicht eine JSON-Quelle für Ihre Daten verwenden, können Sie diesen Schritt überspringen.

Anbringen Event-Handler in dem Adapter

Innerhalb eines Listview. können wir leicht Ereignis Zuhörer auf eine der Ansichten, die Anzeigeposition bewusst mit anhängen:

Sie können auch in ähnlicher Weise auch ein ganzes Objekt durch einen Tag übergeben, wie hier gezeigt:

Mit diesem Ansatz können Sie ganz leicht die Daten zugreifen, wie aus jeder Event-Handler benötigt.

Verbessern der Leistung mit dem ViewHolder Muster

Zur Verbesserung der Leistung, sollten wir den benutzerdefinierten Adapter ändern, indem die ViewHolder Muster anwenden, die erheblich die Bevölkerung der Listview beschleunigt durch Caching Ansicht Lookups für glattere, schnellere Artikel Belastung:

Anpassen Android Listview Reihen von Subclassing beschreibt eine Strategie für die Fälle von Kindern Ansichten zu erhalten, einen ähnlichen Ansatz als ViewHolder aber ohne ausdrückliche ViewHolder Unterklasse verwenden.

Erstellt von Codepfad mit viel Hilfe von der Gemeinde. Inhalt der durch cc-wiki Lizenz mit Namensnennung erforderlich. Sie sind frei remixen und wieder verwenden, solange Sie Attribut und eine ähnliche Lizenz verwenden.

In Verbindung stehende Artikel