Xamarin.Android ListView

ListView è un importante componente dell'interfaccia utente delle applicazioni Android; viene utilizzato ovunque da brevi elenchi di opzioni di menu a lunghi elenchi di contatti o preferiti internet. Offre un modo semplice per presentare un elenco di righe scorrevoli che può essere formattato con uno stile predefinito o personalizzato in modo esteso.

Panoramica

Le visualizzazioni elenco e gli adattatori sono inclusi nei blocchi predefiniti più fondamentali delle applicazioni Android. La ListView classe fornisce un modo flessibile per presentare i dati, sia che si tratti di un menu breve o di un lungo elenco di scorrimento. Offre funzionalità di usabilità come scorrimento rapido, indici e selezione singola o multipla che consentono di creare interfacce utente compatibili con dispositivi mobili per le applicazioni. Un'istanza di ListView richiede un Adapter da cui ricevere i dati presenti nelle visualizzazioni di righe.

Questa guida illustra come implementare ListView e le varie Adapter classi in Xamarin.Android. Illustra anche come personalizzare l'aspetto di un ListViewoggetto e illustra l'importanza del riutilizzo delle righe per ridurre il consumo di memoria. È anche possibile esaminare l'impatto ListView e Adapter l'uso del ciclo di vita delle attività. Se si lavora su applicazioni multipiattaforma con Xamarin.iOS, il ListView controllo è strutturalmente simile a iOS UITableView (e Android Adapter è simile a UITableViewSource).

Prima di tutto, una breve esercitazione introduce con ListView un esempio di codice di base. Vengono quindi forniti collegamenti ad argomenti più avanzati per facilitare l'uso ListView nelle app reali.

Nota

Il RecyclerView widget è una versione più avanzata e flessibile di ListView. Poiché RecyclerView è progettato per essere il successore di ListView (e GridView), è consigliabile usare RecyclerView anziché ListView per lo sviluppo di nuove app. Per altre informazioni, vedere RecyclerView.

Esercitazione su ListView

ListView è un ViewGroup che crea un elenco di elementi scorrevoli. Gli elementi dell'elenco vengono inseriti automaticamente nell'elenco utilizzando un oggetto IListAdapter.

In questa esercitazione si creerà un elenco scorrevole di nomi di paese/area geografica letti da una matrice di stringhe. Quando si seleziona una voce di elenco, verrà visualizzata la posizione dell'elemento nell'elenco.

Avviare un nuovo progetto denominato HelloListView.

Creare un file XML denominato list_item.xml e salvarlo all'interno della cartella Resources/Layout/ . Inserire quanto segue:

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

Questo file definisce il layout per ogni elemento che verrà inserito in ListView.

Aprire MainActivity.cs e modificare la classe per estendere ListActivity (anziché Activity):

public class MainActivity : ListActivity
{

Inserire il codice seguente per il OnCreate()metodo ) :

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

Si noti che questo non carica un file di layout per l'attività (che in genere si esegue con SetContentView(int))). Impostare invece l'oggetto ListAdapter la proprietà aggiunge automaticamente un oggetto ListView per riempire l'intera schermata di ListActivity. Questo metodo accetta un ArrayAdapter<T>oggetto , che gestisce la matrice di elementi di elenco che verranno inseriti in ListView. La ArrayAdapter<T> il costruttore accetta l'applicazione Context, la descrizione del layout per ogni voce di elenco (creata nel passaggio precedente) e un T[] oggetto o Java.Util.IList<T> matrice di oggetti da inserire nell'oggetto ListView (definito successivamente).

La TextFilterEnabled la proprietà attiva il filtro di testo per ListView, in modo che quando l'utente inizia a digitare, l'elenco verrà filtrato.

La ItemClick l'evento può essere usato per sottoscrivere i gestori per i clic. Quando un elemento nell'oggetto ListView viene fatto clic, viene chiamato il gestore e un Toast viene visualizzato il messaggio utilizzando il testo dell'elemento selezionato.

È possibile usare le progettazioni degli elementi di elenco fornite dalla piattaforma invece di definire il proprio file di layout per .ListAdapter Ad esempio, provare a usare Android.Resource.Layout.SimpleListItem1 anziché Resource.Layout.list_item.

Aggiungere l'istruzione using seguente:

using System;

Aggiungere quindi la matrice di stringhe seguente come membro di 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"
  };

Si tratta della matrice di stringhe che verranno inserite nell'oggetto ListView.

Eseguire l'applicazione. È possibile scorrere l'elenco o digitare per filtrarlo, quindi fare clic su un elemento per visualizzare un messaggio. L'output dovrebbe essere simile al seguente:

Example screenshot of ListView with country/region names

Si noti che l'uso di una matrice di stringhe hardcoded non è la procedura consigliata per la progettazione. Uno viene usato in questa esercitazione per semplicità, per illustrare ListView Widget. La procedura consigliata consiste nel fare riferimento a una matrice di stringhe definita da una risorsa esterna, ad esempio con una string-array risorsa nel file Resources/Values/Strings.xml del progetto. Ad esempio:

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

Per usare queste stringhe di risorse per , ArrayAdaptersostituire l'originale ListAdapter riga con quanto segue:

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

Eseguire l'applicazione. L'output dovrebbe essere simile al seguente:

Example screenshot of ListView with smaller list of names

Continuare con ListView

Gli argomenti rimanenti (collegati di seguito) esaminano in modo completo l'uso della ListView classe e dei diversi tipi di adapter che è possibile usare con esso. La struttura è analoga alla seguente:

  • Aspetto visivo : parti del ListView controllo e del relativo funzionamento.

  • Classi: panoramica delle classi usate per visualizzare un oggetto ListView.

  • Visualizzazione di dati in un controllo ListView : come visualizzare un semplice elenco di dati, come implementare ListView's funzionalità di usabilità, come usare layout di riga predefiniti diversi e come gli adapter salvano la memoria usando nuovamente le visualizzazioni di riga.

  • Aspetto personalizzato: modifica dello stile di ListView con layout personalizzati, tipi di carattere e colori.

  • Uso di SQLite : come visualizzare i dati da un database SQLite con un oggetto CursorAdapter.

  • Ciclo di vita delle attività: considerazioni sulla progettazione durante l'implementazione ListView di attività, inclusi i casi in cui nel ciclo di vita è necessario popolare i dati e quando rilasciare le risorse.

La discussione (suddivisa in sei parti) inizia con una panoramica della ListView classe stessa prima di introdurre esempi progressivamente più complessi di come usarlo.

Riepilogo

Questo set di argomenti ha introdotto ListView e fornito alcuni esempi di come usare le funzionalità predefinite di ListActivity. Ha illustrato le implementazioni personalizzate di che consentono layout colorati e l'uso di ListView un database SQLite e ha brevemente toccato la pertinenza del ciclo di vita delle attività nell'implementazione ListView .