Čí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:
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 TextView
atribut '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 Spinner
se 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 Spinner
z 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 ItemEventArgs
můžete zjistit text vybraného objektu a použít ho k zobrazení objektu Toast
.
Spusťte aplikaci; měl by vypadat takto:
Čí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:
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.