Freigeben über


Xamarin.Android ListView

ListView ist eine wichtige UI-Komponente von Android-Anwendungen; es wird überall verwendet, von kurzen Listen mit Menüoptionen bis hin zu langen Listen von Kontakten oder Internetfavoriten. Sie bietet eine einfache Möglichkeit, eine Bildlaufliste mit Zeilen darzustellen, die entweder mit einer integrierten Formatvorlage formatiert oder umfassend angepasst werden können.

Übersicht

Listenansichten und Adapter sind in den grundlegendsten Bausteinen von Android-Anwendungen enthalten. Die ListView Klasse bietet eine flexible Möglichkeit zum Präsentieren von Daten, unabhängig davon, ob es sich um ein kurzes Menü oder eine lange Bildlaufliste handelt. Sie bietet Benutzerfreundlichkeitsfeatures wie schnelles Scrollen, Indizes und einzelne oder mehrfache Auswahl, um Sie bei der Erstellung mobiler benutzerfreundlicher Benutzeroberflächen für Ihre Anwendungen zu unterstützen. Eine ListView-Instanz erfordert einen Adapter, um sie mit in Zeilenansichten enthaltenen Daten zu füllen.

In diesem Handbuch wird erläutert, wie die verschiedenen Adapter Klassen in Xamarin.Android implementiert ListView werden. Außerdem wird veranschaulicht, wie sie die Darstellung einer ListViewZeile anpassen und die Bedeutung der erneuten Verwendung von Zeilen zur Reduzierung des Arbeitsspeicherverbrauchs erläutert. Es gibt auch einige Diskussionen darüber, wie sich der Aktivitätslebenszyklus auf den Lebenszyklus auswirkt ListView und Adapter verwendet. Wenn Sie mit Xamarin.iOS an plattformübergreifenden Anwendungen arbeiten, ist das ListView Steuerelement strukturell mit dem iOS UITableView vergleichbar (und das Android Adapter ähnelt dem UITableViewSource).

Zunächst wird in einem kurzen Lernprogramm ein ListView einfaches Codebeispiel vorgestellt. Als Nächstes werden Links zu erweiterten Themen bereitgestellt, die Ihnen bei der Verwendung ListView in realen Apps helfen.

Hinweis

Das RecyclerView Widget ist eine komplexere und flexiblere Version von ListView. Da RecyclerView es sich um den Nachfolger ListView von (undGridView) handelt, empfehlen wir, sie anstelle ListView der neuen App-Entwicklung zu verwendenRecyclerView. Weitere Informationen finden Sie unter RecyclerView.

Tutorial „ListView“

ListView ist ein ViewGroup erstellt eine Liste mit bildlauffähigen Elementen. Die Listenelemente werden automatisch mithilfe eines IListAdapter.

In diesem Lernprogramm erstellen Sie eine bildlauffähige Liste mit Land-/Regionsnamen, die aus einem Zeichenfolgenarray gelesen werden. Wenn ein Listenelement ausgewählt ist, zeigt eine Popupmeldung die Position des Elements in der Liste an.

Starten Sie ein neues Projekt mit dem Namen HelloListView.

Erstellen Sie eine XML-Datei mit dem Namen list_item.xml , und speichern Sie sie im Ordner "Ressourcen/Layout/ ". Fügen Sie Folgendes ein:

<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:padding="10dp"
    android:textSize="16sp">
</TextView>

Diese Datei definiert das Layout für jedes Element, das in der ListViewDatei platziert wird.

Öffnen MainActivity.cs und Ändern der zu erweiternden ListActivity Klasse (anstelle von Activity):

public class MainActivity : ListActivity
{

Fügen Sie den folgenden Code für die OnCreate()) -Methode ein:

protected override void OnCreate (Bundle bundle)
{
    base.OnCreate (bundle);

    ListAdapter = new ArrayAdapter<string> (this, Resource.Layout.list_item, countries);

    ListView.TextFilterEnabled = true;

    ListView.ItemClick += delegate (object sender, AdapterView.ItemClickEventArgs args)
    {
        Toast.MakeText(Application, ((TextView)args.View).Text, ToastLength.Short).Show();
    };
}

Beachten Sie, dass dadurch keine Layoutdatei für die Aktivität geladen wird (in der Regel mit SetContentView(int))). Legen Sie stattdessen die ListAdapter eigenschaft fügt automatisch eine ListView um den gesamten Bildschirm der ListActivity. Diese Methode verwendet ein ArrayAdapter<T>, das das Array von Listenelementen verwaltet, die in die ListView. Der ArrayAdapter<T> Konstruktor verwendet die Anwendung Context, die Layoutbeschreibung für jedes Listenelement (erstellt im vorherigen Schritt) und ein T[] oder Java.Util.IList<T> Array von Objekten, die in das Objekt eingefügt werden sollen ListView (definiert als Nächstes).

Der TextFilterEnabled die Textfilterung für den ListViewBenutzer aktiviert, sodass die Liste gefiltert wird, wenn der Benutzer mit der Eingabe beginnt.

Der ItemClick -Ereignis kann zum Abonnieren von Handlern für Klicks verwendet werden. Wenn ein Element im ListView wird geklickt, der Handler wird aufgerufen und eine Toast Die Meldung wird mithilfe des Texts aus dem angeklickten Element angezeigt.

Sie können listenelementdesigns verwenden, die von der Plattform bereitgestellt werden, anstatt Ihre eigene Layoutdatei für die ListAdapter. Versuchen Sie Android.Resource.Layout.SimpleListItem1 z. B. anstelle von Resource.Layout.list_item.

Fügen Sie die folgende using -Anweisung hinzu:

using System;

Fügen Sie als Nächstes das folgende Zeichenfolgenarray als Element von MainActivity:

static readonly string[] countries = new String[] {
    "Afghanistan","Albania","Algeria","American Samoa","Andorra",
    "Angola","Anguilla","Antarctica","Antigua and Barbuda","Argentina",
    "Armenia","Aruba","Australia","Austria","Azerbaijan",
    "Bahrain","Bangladesh","Barbados","Belarus","Belgium",
    "Belize","Benin","Bermuda","Bhutan","Bolivia",
    "Bosnia and Herzegovina","Botswana","Bouvet Island","Brazil","British Indian Ocean Territory",
    "British Virgin Islands","Brunei","Bulgaria","Burkina Faso","Burundi",
    "Cote d'Ivoire","Cambodia","Cameroon","Canada","Cape Verde",
    "Cayman Islands","Central African Republic","Chad","Chile","China",
    "Christmas Island","Cocos (Keeling) Islands","Colombia","Comoros","Congo",
    "Cook Islands","Costa Rica","Croatia","Cuba","Cyprus","Czech Republic",
    "Democratic Republic of the Congo","Denmark","Djibouti","Dominica","Dominican Republic",
    "East Timor","Ecuador","Egypt","El Salvador","Equatorial Guinea","Eritrea",
    "Estonia","Ethiopia","Faeroe Islands","Falkland Islands","Fiji","Finland",
    "Former Yugoslav Republic of Macedonia","France","French Guiana","French Polynesia",
    "French Southern Territories","Gabon","Georgia","Germany","Ghana","Gibraltar",
    "Greece","Greenland","Grenada","Guadeloupe","Guam","Guatemala","Guinea","Guinea-Bissau",
    "Guyana","Haiti","Heard Island and McDonald Islands","Honduras","Hong Kong","Hungary",
    "Iceland","India","Indonesia","Iran","Iraq","Ireland","Israel","Italy","Jamaica",
    "Japan","Jordan","Kazakhstan","Kenya","Kiribati","Kuwait","Kyrgyzstan","Laos",
    "Latvia","Lebanon","Lesotho","Liberia","Libya","Liechtenstein","Lithuania","Luxembourg",
    "Macau","Madagascar","Malawi","Malaysia","Maldives","Mali","Malta","Marshall Islands",
    "Martinique","Mauritania","Mauritius","Mayotte","Mexico","Micronesia","Moldova",
    "Monaco","Mongolia","Montserrat","Morocco","Mozambique","Myanmar","Namibia",
    "Nauru","Nepal","Netherlands","Netherlands Antilles","New Caledonia","New Zealand",
    "Nicaragua","Niger","Nigeria","Niue","Norfolk Island","North Korea","Northern Marianas",
    "Norway","Oman","Pakistan","Palau","Panama","Papua New Guinea","Paraguay","Peru",
    "Philippines","Pitcairn Islands","Poland","Portugal","Puerto Rico","Qatar",
    "Reunion","Romania","Russia","Rwanda","Sqo Tome and Principe","Saint Helena",
    "Saint Kitts and Nevis","Saint Lucia","Saint Pierre and Miquelon",
    "Saint Vincent and the Grenadines","Samoa","San Marino","Saudi Arabia","Senegal",
    "Seychelles","Sierra Leone","Singapore","Slovakia","Slovenia","Solomon Islands",
    "Somalia","South Africa","South Georgia and the South Sandwich Islands","South Korea",
    "Spain","Sri Lanka","Sudan","Suriname","Svalbard and Jan Mayen","Swaziland","Sweden",
    "Switzerland","Syria","Taiwan","Tajikistan","Tanzania","Thailand","The Bahamas",
    "The Gambia","Togo","Tokelau","Tonga","Trinidad and Tobago","Tunisia","Turkey",
    "Turkmenistan","Turks and Caicos Islands","Tuvalu","Virgin Islands","Uganda",
    "Ukraine","United Arab Emirates","United Kingdom",
    "United States","United States Minor Outlying Islands","Uruguay","Uzbekistan",
    "Vanuatu","Vatican City","Venezuela","Vietnam","Wallis and Futuna","Western Sahara",
    "Yemen","Yugoslavia","Zambia","Zimbabwe"
  };

Dies ist das Array von Zeichenfolgen, die in die ListViewZeichenfolgen eingefügt werden.

Führen Sie die Anwendung aus. Sie können die Liste scrollen oder sie eingeben, um sie zu filtern, und dann auf ein Element klicken, um eine Nachricht anzuzeigen. Die Ausgabe sollte in etwa wie folgt aussehen:

Beispielfoto von ListView mit Land-/Regionsnamen

Beachten Sie, dass die Verwendung eines hartcodierten Zeichenfolgenarrays nicht die bewährte Entwurfsmethode ist. Eine wird in diesem Lernprogramm zur Einfachheit verwendet, um dies zu veranschaulichen ListView Widget. Es empfiehlt sich, auf ein Zeichenfolgenarray zu verweisen, das von einer externen Ressource definiert wird, z. B. mit einer string-array Ressource in Der Datei "Ressourcen/Werte/Strings.xml ". Zum Beispiel:

<?xml version="1.0" encoding="utf-8"?>
<resources>
  <string name="app_name">HelloListView</string>
  <string-array name="countries_array">
    <item>Bahrain</item>
    <item>Bangladesh</item>
    <item>Barbados</item>
    <item>Belarus</item>
    <item>Belgium</item>
    <item>Belize</item>
    <item>Benin</item>
  </string-array>
</resources>

Ersetzen Sie zum Verwenden dieser Ressourcenzeichenfolgen für das ArrayAdapterOriginal ListAdapter line with the following:

string[] countries = Resources.GetStringArray (Resource.Array.countries_array);
ListAdapter = new ArrayAdapter<string> (this, Resource.Layout.list_item, countries);

Führen Sie die Anwendung aus. Die Ausgabe sollte in etwa wie folgt aussehen:

Beispielfoto von ListView mit kleinerer Liste von Namen

Weiter mit ListView

Die themen für die neu Standard erstellung (unten verlinkt) werfen einen umfassenden Überblick über die Arbeit mit der ListView Klasse und die verschiedenen Typen von Adaptertypen, die Sie damit verwenden können. Die Struktur sieht wie folgt aus:

  • Visuelle Darstellung – Teile des ListView Steuerelements und deren Funktionsweise.

  • Klassen – Übersicht über die Klassen, die zum Anzeigen eines ListView.

  • Anzeigen von Daten in einer ListView – So wird's gemacht: Anzeigen einer einfachen Liste von Daten, Implementieren ListView's von Benutzerfreundlichkeitsfeatures, Verwendung verschiedener integrierter Zeilenlayouts und Speichern von Speicher durch erneute Verwendung von Zeilenansichten durch Adapter.

  • Benutzerdefinierte Darstellung – Ändern der Formatvorlage mit ListView benutzerdefinierten Layouts, Schriftarten und Farben.

  • Verwenden von SQLite – Anzeigen von Daten aus einer SQLite-Datenbank mit einem CursorAdapter.

  • Aktivitätslebenszyklus – Entwurfsüberlegungen bei der Implementierung von ListView Aktivitäten, einschließlich der Stelle, an der Sie Ihre Daten auffüllen sollten und wann Ressourcen freigegeben werden sollen.

Die Diskussion (unterteilt in sechs Teile) beginnt mit einer Übersicht über die ListView Klasse selbst, bevor sie schrittweise komplexere Beispiele für die Verwendung einführen.

Zusammenfassung

Dieser Satz von Themen wurde eingeführt ListView und enthält einige Beispiele für die Verwendung der integrierten Features der ListActivity. Es diskutierte benutzerdefinierte Implementierungen, die ListView für farbige Layouts und die Verwendung einer SQLite-Datenbank zulässig sind, und es wurde kurz auf die Relevanz des Aktivitätslebenszyklus für Ihre ListView Implementierung eingegangen.