Udostępnij za pośrednictwem


Xamarin.Android ListView

ListView to ważny składnik interfejsu użytkownika aplikacji systemu Android; Jest on używany wszędzie z krótkich list opcji menu do długich list kontaktów lub ulubionych internetowych. Zapewnia prosty sposób prezentowania listy przewijania wierszy, które można sformatować za pomocą wbudowanego stylu lub dostosowanego w szerokim zakresie.

Omówienie

Widoki listy i karty są zawarte w najbardziej podstawowych blokach konstrukcyjnych aplikacji systemu Android. Klasa ListView zapewnia elastyczny sposób prezentowania danych, niezależnie od tego, czy jest to krótkie menu, czy długa lista przewijania. Zapewnia funkcje użyteczności, takie jak szybkie przewijanie, indeksy i pojedynczy lub wielokrotny wybór, które ułatwiają tworzenie przyjaznych dla urządzeń przenośnych interfejsów użytkownika dla aplikacji. Wystąpienie ListView wymaga adaptera, aby nakarmić go danymi zawartymi w widokach wierszy.

W tym przewodniku wyjaśniono, jak zaimplementować ListView różne Adapter klasy w środowisku Xamarin.Android. Przedstawiono również sposób dostosowywania wyglądu obiektu ListViewi omawia znaczenie ponownego użycia wiersza w celu zmniejszenia zużycia pamięci. Istnieje również kilka dyskusji na temat wpływu cyklu życia działania na ListView i Adapter wykorzystania. Jeśli pracujesz nad aplikacjami dla wielu platform za pomocą platformy Xamarin.iOS, kontrolka ListView jest strukturalnie podobna do systemu iOS UITableView (a system Android Adapter jest podobny do ).UITableViewSource

Najpierw krótki samouczek zawiera wprowadzenie do ListView podstawowego przykładu kodu. Następnie dostępne są linki do bardziej zaawansowanych tematów, które ułatwiają korzystanie z ListView aplikacji rzeczywistych.

Uwaga

Widżet RecyclerView jest bardziej zaawansowaną i elastyczną wersją programu ListView. Ponieważ RecyclerView jest przeznaczony jako następca ListView (i GridView), zalecamy użycie RecyclerView , a nie ListView do tworzenia nowych aplikacji. Aby uzyskać więcej informacji, zobacz RecyclerView.

Samouczek dotyczący obiektu ListView

ListView jest ViewGroup tworzy listę elementów przewijanych. Elementy listy są automatycznie wstawiane do listy przy użyciu elementu IListAdapter.

W tym samouczku utworzysz przewijaną listę nazw krajów/regionów odczytywanych z tablicy ciągów. Po wybraniu elementu listy zostanie wyświetlony wyskakujące komunikat o pozycji elementu na liście.

Uruchom nowy projekt o nazwie HelloListView.

Utwórz plik XML o nazwie list_item.xml i zapisz go w folderze Resources/Layout/ . Wstaw następujące elementy:

<?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>

Ten plik definiuje układ dla każdego elementu, który zostanie umieszczony w obiekcie ListView.

Otwórz MainActivity.cs i zmodyfikuj klasę w celu rozszerzenia ListActivity (zamiast Activity):

public class MainActivity : ListActivity
{

Wstaw następujący kod dla OnCreate()metody ) :

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();
    };
}

Zwróć uwagę, że nie powoduje to załadowania pliku układu dla działania (zwykle wykonywanego za pomocą SetContentView(int)polecenia )). Zamiast tego należy ustawić ListAdapter właściwość automatycznie dodaje ListView aby wypełnić cały ekran obiektu ListActivity. Ta metoda przyjmuje klasę ArrayAdapter<T>, która zarządza tablicą elementów listy, które zostaną umieszczone w obiekcie ListView. Standard ArrayAdapter<T>konstruktor przyjmuje aplikację Context, opis układu dla każdego elementu listy (utworzony w poprzednim kroku) i lub T[]Java.Util.IList<T> tablica obiektów do wstawienia w obiekcie ListView (zdefiniowane dalej).

Standard TextFilterEnabled właściwość włącza filtrowanie tekstu dla elementu , aby po rozpoczęciu ListViewwpisywania przez użytkownika lista została odfiltrowana.

Standard ItemClick zdarzenie może służyć do subskrybowania procedur obsługi kliknięć. Gdy element w elemencie ListView jest klikany, wywoływana jest procedura obsługi i Toast zostanie wyświetlony komunikat przy użyciu tekstu z klikniętego elementu.

Można użyć projektów elementów listy udostępnianych przez platformę zamiast definiowania własnego pliku układu dla elementu ListAdapter. Na przykład spróbuj użyć polecenia Android.Resource.Layout.SimpleListItem1 zamiast Resource.Layout.list_item.

Dodaj następującą using instrukcję:

using System;

Następnie dodaj następującą tablicę ciągów jako element członkowski :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"
  };

Jest to tablica ciągów, które zostaną umieszczone w obiekcie ListView.

Uruchom aplikację. Możesz przewinąć listę lub wpisać, aby ją filtrować, a następnie kliknąć element, aby wyświetlić komunikat. Powinny zostać wyświetlone informacje podobne do następujących:

Przykładowy zrzut ekranu przedstawiający obiekt ListView z nazwami kraju/regionu

Należy pamiętać, że używanie tablicy ciągów zakodowanych w kodzie nie jest najlepszym rozwiązaniem projektowym. Jeden z nich jest używany w tym samouczku dla uproszczenia, aby zademonstrować ListView Widget. Lepszym rozwiązaniem jest odwołanie do tablicy ciągów zdefiniowanej przez zasób zewnętrzny, taki jak zasób string-array w pliku Resources/Values/Strings.xml projektu. Na przykład:

<?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>

Aby użyć tych ciągów zasobów dla ArrayAdapterelementu , zastąp oryginalny ciąg ListAdapter wiersz z następującymi elementami:

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

Uruchom aplikację. Powinny zostać wyświetlone informacje podobne do następujących:

Przykładowy zrzut ekranu przedstawiający obiekt ListView z mniejszą listą nazw

Dalsze przechodzenie do obiektu ListView

Pozostałe tematy (połączone poniżej) przedstawiają kompleksową pracę z klasą ListView i różnymi typami kart, których można używać. Struktura jest następująca:

  • Wygląd wizualizacji — części kontrolki ListView i sposób ich działania.

  • Klasy — omówienie klas używanych do wyświetlania klasy ListView.

  • Wyświetlanie danych w widoku ListView — jak wyświetlić prostą listę danych; jak zaimplementować ListView's funkcje użyteczności, jak używać różnych wbudowanych układów wierszy oraz jak adaptery zapisują pamięć przy użyciu widoków wierszy.

  • Wygląd niestandardowy — zmiana stylu ListView obiektu za pomocą niestandardowych układów, czcionek i kolorów.

  • Using SQLite — jak wyświetlać dane z bazy danych SQLite za pomocą elementu CursorAdapter.

  • Cykl życia działania — zagadnienia dotyczące projektowania podczas implementowania ListView działań, w tym miejsce, w którym należy wypełnić dane i kiedy należy zwolnić zasoby.

Dyskusja (podzielona na sześć części) rozpoczyna się od omówienia ListView samej klasy przed wprowadzeniem stopniowo bardziej złożonych przykładów sposobu jej używania.

Podsumowanie

W tym zestawie tematów przedstawiono ListView i podano kilka przykładów używania wbudowanych funkcji programu ListActivity. Omówiła niestandardowe implementacje ListView , które są dozwolone dla kolorowych układów i korzystania z bazy danych SQLite, i krótko dotknęła istotności cyklu życia działania w ListView implementacji.