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. Es bietet eine einfache Möglichkeit, eine Bildlaufliste mit Zeilen anzuzeigen, die entweder mit einem integrierten Stil 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. Es bietet Benutzerfreundlichkeitsfeatures wie schnelles Scrollen, Indizes und einzel- oder mehrfache Auswahl, um Sie beim Erstellen mobiler Benutzeroberflächen für Ihre Anwendungen zu unterstützen. Ein ListView instance erfordert einen Adapter, um ihn mit Daten zu versorgen, die in Zeilenansichten enthalten sind.

In diesem Leitfaden wird erläutert, wie und die verschiedenen Adapter Klassen in Xamarin.Android implementiert ListView werden. Außerdem wird veranschaulicht, wie das Erscheinungsbild eines ListViewangepasst wird, und es wird erläutert, wie wichtig die Wiederverwendung von Zeilen ist, um den Arbeitsspeicherverbrauch zu reduzieren. Es gibt auch einige Diskussionen darüber, wie sich der Aktivitätslebenszyklus auf und die Adapter Verwendung auswirktListView. Wenn Sie mit Xamarin.iOS an plattformübergreifenden Anwendungen arbeiten, ähnelt das ListView Steuerelement strukturell dem iOS UITableView (und Android Adapter ähnelt ).UITableViewSource

Zunächst führt ein kurzes Tutorial mit ListView einem einfachen Codebeispiel ein. 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 erweiterte und flexiblere Version von ListView. Da RecyclerView als Nachfolger von ListView (und GridView) konzipiert ist, empfehlen wir, dass Sie nicht für die Entwicklung neuer Apps, sondern ListView verwendenRecyclerView. Weitere Informationen finden Sie unter RecyclerView.

Tutorial „ListView“

ListView ist einViewGroup durch die eine Liste mit scrollbaren Elementen erstellt wird. Die Listenelemente werden mithilfe von IListAdapterautomatisch in die Liste eingefügt.

In diesem Tutorial erstellen Sie eine scrollbare Liste der Länder-/Regionsnamen, die aus einem Zeichenfolgenarray gelesen werden. Wenn ein Listenelement ausgewählt wird, wird die Position des Elements in der Liste in einer Popupmeldung angezeigt.

Starten Sie ein neues Projekt mit dem Namen HelloListView.

Erstellen Sie eine XML-Datei mit dem Namenlist_item.xml , und speichern Sie sie im Ordner Resources/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 ListViewplatziert wird.

Öffnen Und MainActivity.cs ändern Sie die -Klasse, um (anstelle von Activity) zu erweitern ListActivity .

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 (was Sie normalerweise mit SetContentView(int))tun). Legen Sie stattdessen dieListAdapter -Eigenschaft fügt automatisch einListView , um den gesamten Bildschirm des ListActivityauszufüllen. Diese Methode verwendet eine ArrayAdapter<T>, die das Array von Listenelementen verwaltet, die in der ListViewplatziert werden. TheArrayAdapter<T> -Konstruktor verwendet die Anwendung Context, die Layoutbeschreibung für jedes Listenelement (erstellt im vorherigen Schritt) und ein T[] oderJava.Util.IList<T> Array von Objekten, die in das -Objekt eingefügt werden sollenListView (als Nächstes definiert).

TheTextFilterEnabled die -Eigenschaft aktiviert die Textfilterung für ListView, sodass die Liste gefiltert wird, wenn der Benutzer mit der Eingabe beginnt.

TheItemClick -Ereignis kann verwendet werden, um Handler für Klicks zu abonnieren. Wenn ein Element in derListView wird geklickt, der Handler wird aufgerufen und einToast wird mithilfe des Texts aus dem angeklickten Element angezeigt.

Sie können Listenelementdesigns verwenden, die von der Plattform bereitgestellt werden, anstatt eine eigene Layoutdatei für die ListAdapterzu definieren. Verwenden Sie Android.Resource.Layout.SimpleListItem1 beispielsweise 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 Member von MainActivityhinzu:

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 platziert ListViewwerden.

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

Beispielscreenshot von ListView mit Landes-/Regionsnamen

Beachten Sie, dass die Verwendung eines hartcodierten Zeichenfolgenarrays nicht die bewährte Entwurfspraxis ist. Eins wird in diesem Tutorial der Einfachheit halber verwendet, um dieListView Widget. Die bessere Methode besteht darin, auf ein Zeichenfolgenarray zu verweisen, das von einer externen Ressource definiert wird, z. B. mit einer string-array Ressource in Ihrer Projektdatei Ressourcen/Werte/Strings.xml . 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>

Um diese Ressourcenzeichenfolgen für zu ArrayAdapterverwenden, ersetzen Sie die ursprünglicheListAdapter Zeile mit Folgendem:

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:

Beispielscreenshot von ListView mit kleinerer Liste von Namen

Weitergehen mit ListView

Die restlichen Themen (unten verlinkt) werfen einen umfassenden Einblick in 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 ListViewverwendet werden.

  • Anzeigen von Daten in einer ListView – So wird's gemacht: Anzeigen einer einfachen Liste von Daten; Wie Sie Benutzerfreundlichkeitsfeatures implementieren ListView's , verschiedene integrierte Zeilenlayouts verwenden und wie Adapter Arbeitsspeicher durch erneute Verwendung von Zeilenansichten speichern.

  • Benutzerdefinierte Darstellung : Ändern des Stils 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 Punkte, an denen Sie im Lebenszyklus 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 vorstellt.

Zusammenfassung

Dieser Satz von Themen wurde eingeführt ListView und enthält einige Beispiele für die Verwendung der integrierten Features von ListActivity. Es wurden benutzerdefinierte Implementierungen von ListView erläutert, die bunte Layouts und die Verwendung einer SQLite-Datenbank ermöglichten, und es wurde kurz die Relevanz des Aktivitätslebenszyklus für Ihre ListView Implementierung behandelt.