Aracılığıyla paylaş


Xamarin.Android Spinner

Spinner öğeleri seçmek için açılan liste sunan bir pencere öğesidir. Bu kılavuzda, Spinner'da seçim listesini görüntüleyen basit bir uygulamanın nasıl oluşturulacağı ve ardından seçilen seçimle ilişkili diğer değerleri görüntüleyen değişikliklerin nasıl oluşturulacağı açıklanmaktadır.

Temel Değiştirici

Bu öğreticinin ilk bölümünde gezegenlerin listesini görüntüleyen basit bir değiştirici pencere öğesi oluşturacaksınız. Bir gezegen seçildiğinde, seçili öğeyi bir bildirim iletisi görüntüler:

Example screenshots of HelloSpinner app

HelloSpinner adlı yeni bir proje başlatın.

Resources/Layout/Main.axml dosyasını açın ve aşağıdaki XML'yi ekleyin:

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

's android:text özniteliğinin TextViewve 's android:prompt özniteliğinin Spinneraynı dize kaynağına başvurduğunu fark edin. Bu metin, pencere öğesi için başlık olarak davranır. öğesine uygulandığında Spinner, pencere öğesi seçildiğinde görüntülenen seçim iletişim kutusunda başlık metni görüntülenir.

Kaynakları/Değerleri/Strings.xml düzenleyin ve dosyayı şöyle görünecek şekilde değiştirin:

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

İkinci <string> öğe, yukarıdaki düzende ve Spinner tarafından TextView başvuruda bulunan başlık dizesini tanımlar. öğesi, <string-array> pencere öğesinde liste olarak görüntülenecek dizelerin listesini Spinner tanımlar.

Şimdi MainActivity.cs açın ve aşağıdaki using deyimi ekleyin:

using System;

Ardından , ) yöntemi için OnCreate()aşağıdaki kodu ekleyin:

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

Main.axml Düzen içerik görünümü olarak ayarlandıktan sonra, Spinner pencere öğesi ile FindViewById<>(int)düzenden yakalanır. CreateFromResource()yöntemi daha sonra dize dizisindeki her öğeyi öğesini için ilk görünüme Spinner bağlayan yeni ArrayAdapterbir oluşturur (bu, seçildiğinde her öğenin değiştiricide nasıl görüneceğidir). Resource.Array.planets_array Kimlik yukarıda tanımlananastring-array, kimlik ise Android.Resource.Layout.SimpleSpinnerItem platform tarafından tanımlanan standart değiştirici görünümü için bir düzene başvurur. SetDropDownViewResource , pencere öğesi açıldığında her öğenin görünümünü tanımlamak için çağrılır. Son olarak, ArrayAdapter özelliğini ayarlayarak öğesinin tüm öğelerini ile Spinner ilişkilendirecek Adapter şekilde ayarlanır.

Şimdi öğesinden Spinnerbir öğe seçildiğinde uygulamaya bildirimde bulunan bir geri çağırma yöntemi sağlayın. Bu yöntemin aşağıdaki gibi görünmesi gerekir:

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

Bir öğe seçildiğinde, öğelere erişilebilmesi için gönderen bir Spinner öğesine dönüştürülür. Position özelliğini ItemEventArgskullanarak, seçili nesnenin metnini bulabilir ve bunu kullanarak bir Toastgörüntüleyebilirsiniz.

Uygulamayı çalıştırın; şöyle görünmelidir:

Screenshot example of Spinner with Mars selected as the planet

Anahtar/Değer Çiftlerini Kullanan Değiştirici

Genellikle, uygulamanız tarafından kullanılan bir tür veriyle ilişkili anahtar değerlerini görüntülemek için kullanılması Spinner gerekir. Spinner Anahtar/değer çiftleriyle doğrudan çalışmadığından, anahtar/değer çiftini ayrı olarak depolamanız, anahtar değerleriyle doldurmanız Spinner ve ardından ilişkili veri değerini aramak için Değiştirici'de seçili anahtarın konumunu kullanmanız gerekir.

Aşağıdaki adımlarda HelloSpinner uygulaması seçili gezegen için ortalama sıcaklığı görüntüleyecek şekilde değiştirilmiştir:

MainActivity.cs aşağıdaki using deyimi ekleyin:

using System.Collections.Generic;

Sınıfına aşağıdaki örnek değişkenini MainActivity ekleyin. Bu liste, gezegenler ve bunların ortalama sıcaklıkları için anahtar/değer çiftlerini barındıracaktır:

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

yönteminde OnCreate , bildirilmeden önce adapter aşağıdaki kodu ekleyin:

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

Bu kod, gezegenler ve bunların ilişkili ortalama sıcaklıkları için basit bir depo oluşturur. (Gerçek dünyadaki bir uygulamada veritabanı genellikle anahtarları ve ilişkili verilerini depolamak için kullanılır.)

Yukarıdaki kodun hemen arkasına aşağıdaki satırları ekleyerek anahtarları ayıklayın ve bir listeye ekleyin (sırayla):

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

Bu listeyi oluşturucuya ArrayAdapter (kaynak yerine planets_array ) geçirin:

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

Seçili konumun seçili gezegenle ilişkili değeri (sıcaklık) aramak için kullanılması için değiştirin spinner_ItemSelected :

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

Uygulamayı çalıştırın; bildirim şu şekilde görünmelidir:

Example of planet selection displaying temperature

Kaynaklar

Bu sayfanın bazı bölümleri, Android Açık Kaynak Projesi tarafından oluşturulan ve paylaşılan çalışmaya dayalı değişikliklerdir ve Creative Commons 2.5 İlişkilendirme Lisansı'nda açıklanan koşullara göre kullanılır.