Sdílet prostřednictvím


Číselník Xamarin.Android

Spinner je widget, který obsahuje rozevírací seznam pro výběr položek. Tato příručka vysvětluje, jak vytvořit jednoduchou aplikaci, která zobrazí seznam voleb ve spinneru a následně úpravy, které zobrazují další hodnoty přidružené k vybrané volbě.

Základní číselník

V první části tohoto kurzu vytvoříte jednoduchý číselník, který zobrazí seznam planet. Když je vybrána planeta, zobrazí se zpráva s vybranou položkou:

Example screenshots of HelloSpinner app

Spusťte nový projekt s názvem HelloSpinner.

Otevřete Prostředky/Layout/Main.axml a vložte následující XML:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:padding="10dip"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content">
    <TextView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="10dip"
        android:text="@string/planet_prompt"
    />
    <Spinner
        android:id="@+id/spinner"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:prompt="@string/planet_prompt"
    />
</LinearLayout>

Všimněte si, že TextViewatribut 's android:text a Spinner's android:prompt atribut oba odkazují na stejný řetězcový prostředek. Tento text se chová jako název widgetu. Po použití na položku Spinnerse text nadpisu zobrazí v dialogovém okně pro výběr, které se zobrazí při výběru widgetu.

Upravte prostředky, hodnoty nebo Strings.xml a upravte soubor tak, aby vypadal takto:

<?xml version="1.0" encoding="utf-8"?>
<resources>
  <string name="app_name">HelloSpinner</string>
  <string name="planet_prompt">Choose a planet</string>
  <string-array name="planets_array">
    <item>Mercury</item>
    <item>Venus</item>
    <item>Earth</item>
    <item>Mars</item>
    <item>Jupiter</item>
    <item>Saturn</item>
    <item>Uranus</item>
    <item>Neptune</item>
  </string-array>
</resources>

Druhý <string> prvek definuje řetězec názvu, na který TextView odkazuje výše uvedený a Spinner v rozložení. Element <string-array> definuje seznam řetězců, které se zobrazí jako seznam ve widgetu Spinner .

Nyní otevřete MainActivity.cs a přidejte následující using příkaz:

using System;

Dále vložte následující kód pro metodu OnCreate()):

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

    // Set our view from the "Main" layout resource
    SetContentView (Resource.Layout.Main);

    Spinner spinner = FindViewById<Spinner> (Resource.Id.spinner);

    spinner.ItemSelected += new EventHandler<AdapterView.ItemSelectedEventArgs> (spinner_ItemSelected);
    var adapter = ArrayAdapter.CreateFromResource (
            this, Resource.Array.planets_array, Android.Resource.Layout.SimpleSpinnerItem);

    adapter.SetDropDownViewResource (Android.Resource.Layout.SimpleSpinnerDropDownItem);
    spinner.Adapter = adapter;
}

Jakmile Main.axml je rozložení nastaveno jako zobrazení obsahu, Spinner widget se zachytí z rozložení pomocí FindViewById<>(int). CreateFromResource() metoda poté vytvoří novou ArrayAdapter, která váže každou položku v řetězcové matici na počáteční vzhled pro Spinner (což je způsob, jak se každá položka zobrazí v číselníku při výběru). ID Resource.Array.planets_array odkazuje na string-array definované výše a Android.Resource.Layout.SimpleSpinnerItem ID odkazuje na rozložení standardního vzhledu číselníku definovaného platformou. SetDropDownViewResource je volána k definování vzhledu pro každou položku při otevření widgetu. Nakonec je nastavena ArrayAdapter tak, aby přidružila všechny její položky k Spinner nastavení Adapter vlastnosti.

Nyní zadejte metodu zpětného volání, která upozorní aplikaci, když byla vybrána Spinnerz položky . Tato metoda by měla vypadat takto:

private void spinner_ItemSelected (object sender, AdapterView.ItemSelectedEventArgs e)
{
    Spinner spinner = (Spinner)sender;
    string toast = string.Format ("The planet is {0}", spinner.GetItemAtPosition (e.Position));
    Toast.MakeText (this, toast, ToastLength.Long).Show ();
}

Když je vybrána položka, odesílatel je přetypován na seznam, aby bylo možné k položkám Spinner přistupovat. Position Pomocí vlastnosti v objektu ItemEventArgsmůžete zjistit text vybraného objektu a použít ho k zobrazení objektu Toast.

Spusťte aplikaci; měl by vypadat takto:

Screenshot example of Spinner with Mars selected as the planet

Číselník s použitím párů klíč/hodnota

Často je nutné použít Spinner k zobrazení klíčových hodnot, které jsou přidružené k určitému druhu dat používaných vaší aplikací. Vzhledem k tomu Spinner , že nefunguje přímo s páry klíč/hodnota, je nutné uložit dvojici klíč/hodnota samostatně, naplnit Spinner hodnotami klíče a pak pomocí pozice vybraného klíče v číselníku vyhledat přidruženou datovou hodnotu.

V následujících krocích se aplikace HelloSpinner upraví tak, aby zobrazovala průměrnou teplotu pro vybranou planetu:

Do MainActivity.cs přidejte následující using příkaz:

using System.Collections.Generic;

Do třídy přidejte následující proměnnou MainActivity instance. Tento seznam bude obsahovat páry klíč/hodnota pro planety a jejich střední teploty:

private List<KeyValuePair<string, string>> planets;

OnCreate Do metody před deklarujte následující kódadapter:

planets = new List<KeyValuePair<string, string>>
{
    new KeyValuePair<string, string>("Mercury", "167 degrees C"),
    new KeyValuePair<string, string>("Venus", "464 degrees C"),
    new KeyValuePair<string, string>("Earth", "15 degrees C"),
    new KeyValuePair<string, string>("Mars", "-65 degrees C"),
    new KeyValuePair<string, string>("Jupiter" , "-110 degrees C"),
    new KeyValuePair<string, string>("Saturn", "-140 degrees C"),
    new KeyValuePair<string, string>("Uranus", "-195 degrees C"),
    new KeyValuePair<string, string>("Neptune", "-200 degrees C")
};

Tento kód vytvoří jednoduché úložiště pro planety a jejich přidružené střední teploty. (V reálné aplikaci se databáze obvykle používá k ukládání klíčů a jejich přidružených dat.)

Bezprostředně za výše uvedený kód přidejte následující řádky pro extrahování klíčů a jejich vložení do seznamu (v pořadí):

List<string> planetNames = new List<string>();
foreach (var item in planets)
    planetNames.Add (item.Key);

Předejte tento seznam konstruktoru ArrayAdapter (místo planets_array prostředku):

var adapter = new ArrayAdapter<string>(this,
    Android.Resource.Layout.SimpleSpinnerItem, planetNames);

Upravte spinner_ItemSelected tak, aby se vybraná pozice použila k vyhledání hodnoty (teploty) přidružené k vybrané planetě:

private void spinner_ItemSelected(object sender, AdapterView.ItemSelectedEventArgs e)
{
    Spinner spinner = (Spinner)sender;
    string toast = string.Format("The mean temperature for planet {0} is {1}",
        spinner.GetItemAtPosition(e.Position), planets[e.Position].Value);
    Toast.MakeText(this, toast, ToastLength.Long).Show();
}

Spusťte aplikaci; informační zpráva by měla vypadat takto:

Example of planet selection displaying temperature

Zdroje informací

Části této stránky jsou upraveny na základě práce vytvořené a sdílené opensourcový projekt Androidu a používají se podle podmínek popsaných vlicenci Creative Commons 2.5 Atribution License.