SpinnerSpinner

Spinner es un widget que presenta una lista desplegable para seleccionar los elementos.Spinner is a widget that presents a drop-down list for selecting items. Esta guía explica cómo crear una aplicación sencilla que muestra una lista de opciones en un control de número, seguido de las modificaciones que se muestran otros valores asociados con la opción seleccionada.This guide explains how to create a simple app that displays a list of choices in a Spinner, followed by modifications that display other values associated with the selected choice.

Control de giro básicaBasic Spinner

En la primera parte de este tutorial, creará un widget spinner simple que muestra una lista de los planetas.In the first part of this tutorial, you'll create a simple spinner widget that displays a list of planets. Cuando se selecciona un planeta, un mensaje de notificación muestra el elemento seleccionado:When a planet is selected, a toast message displays the selected item:

Capturas de pantalla de ejemplo de aplicación HelloSpinnerExample screenshots of HelloSpinner app

Inicie un nuevo proyecto denominado HelloSpinner.Start a new project named HelloSpinner.

Abra Resources/Layout/Main.axml e inserte el siguiente código XML:Open Resources/Layout/Main.axml and insert the following 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>

Tenga en cuenta que el TextView del android:text atributo y el Spinner del android:prompt atributo ambos hacen referencia al mismo recurso de cadena.Notice that the TextView's android:text attribute and the Spinner's android:prompt attribute both reference the same string resource. Este texto se comporta como un título para el widget.This text behaves as a title for the widget. Cuando se aplica a la Spinner , el texto del título aparecerá en el cuadro de diálogo de selección que aparece al seleccionar el widget.When applied to the Spinner, the title text will appear in the selection dialog that appears upon selecting the widget.

Editar Resources/Values/Strings.xml y modifique el archivo tenga el siguiente aspecto:Edit Resources/Values/Strings.xml and modify the file to look like this:

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

El segundo <string> elemento define la cadena de título al que hace referencia el TextView y Spinner en el diseño anterior.The second <string> element defines the title string referenced by the TextView and Spinner in the layout above. El <string-array> elemento define la lista de cadenas que se mostrará como la lista en el Spinner widget.The <string-array> element defines the list of strings that will be displayed as the list in the Spinner widget.

Ahora abra MainActivity.cs y agregue la siguiente using instrucción:Now open MainActivity.cs and add the following using statement:

using System;

A continuación, inserte el código siguiente para el OnCreate()Next, insert the following code for the OnCreate() método:method:

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

Después de la Main.axml diseño se establece como la vista de contenido, el Spinner widget se captura desde el diseño con FindViewById<>(int) .After the Main.axml layout is set as the content view, the Spinner widget is captured from the layout with FindViewById<>(int). El CreateFromResource()The CreateFromResource() método, a continuación, crea un nuevo ArrayAdapter , que enlaza cada elemento de la matriz de cadena a la apariencia inicial para el Spinner (que es el aspecto de cada elemento en el control de número cuando se selecciona) .method then creates a new ArrayAdapter, which binds each item in the string array to the initial appearance for the Spinner (which is how each item will appear in the spinner when selected). El Resource.Array.planets_array referencias de identificador el string-array definido anteriormente y el Android.Resource.Layout.SimpleSpinnerItem identificador hace referencia a un diseño para la apariencia del control de giro estándar, definido por la plataforma.The Resource.Array.planets_array ID references the string-array defined above and the Android.Resource.Layout.SimpleSpinnerItem ID references a layout for the standard spinner appearance, defined by the platform. SetDropDownViewResource se llama para definir la apariencia de cada elemento cuando se abre el widget.is called to define the appearance for each item when the widget is opened. Por último, el ArrayAdapter está establecido para asociar todos sus elementos con el Spinner estableciendo el Adapter propiedad.Finally, the ArrayAdapter is set to associate all of its items with the Spinner by setting the Adapter property.

Ahora proporcionan un método de devolución de llamada que elementos NOTIFY la aplicación cuando se ha seleccionado un elemento de la Spinner .Now provide a callback method that notifys the application when an item has been selected from the Spinner. Este es el aspecto que debería este método:Here's what this method should look like:

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

Cuando se selecciona un elemento, el remitente se convierte en un Spinner para que se pueden tener acceso a los elementos.When an item is selected, the sender is cast to a Spinner so that items can be accessed. Mediante el Position propiedad en el ItemEventArgs, puede averiguar el texto del objeto seleccionado y utilizarla para mostrar un Toast .Using the Position property on the ItemEventArgs, you can find out the text of the selected object, and use it to display a Toast.

Ejecute la aplicación. debe ver así:Run the application; it should look like this:

Captura de pantalla ejemplo de control de giro con Mars seleccionado como el planetaScreenshot example of Spinner with Mars selected as the planet

Spinner mediante pares clave/valorSpinner Using Key/Value Pairs

A menudo es necesario usar Spinner para mostrar los valores de clave que están asociados con algún tipo de datos usados por la aplicación.Often it is necessary to use Spinner to display key values that are associated with some kind of data used by your app. Dado que Spinner no funciona directamente con pares clave/valor, debe almacenar el par clave/valor por separado, rellene el Spinner con valores de clave, a continuación, utilizar la posición de la clave seleccionada en el control de número para buscar el valor de datos asociados.Because Spinner does not work directly with key/value pairs, you must store the key/value pair separately, populate the Spinner with key values, then use the position of the selected key in the Spinner to look up the associated data value.

En los pasos siguientes, el HelloSpinner aplicación se ha modificado para mostrar la temperatura media del planeta seleccionado:In the following steps, the HelloSpinner app is modified to display the mean temperature for the selected planet:

Agregue el siguiente using instrucción MainActivity.cs:Add the following using statement to MainActivity.cs:

using System.Collections.Generic;

Agregue la siguiente variable de instancia para el MainActivity clase.Add the following instance variable to the MainActivity class. Esta lista contendrá los pares clave/valor para los planetas y las temperaturas mean:This list will hold key/value pairs for the planets and their mean temperatures:

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

En el OnCreate método, agregue el código siguiente antes de adapter se ha declarado:In the OnCreate method, add the following code before adapter is declared:

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

Este código crea un almacén para los planetas y sus asociados de las temperaturas mean simple.This code creates a simple store for planets and their associated mean temperatures. (En una aplicación real, una base de datos normalmente se usa para almacenar las claves y sus datos asociados).(In a real-world app, a database is typically used to store keys and their associated data.)

Inmediatamente después del código anterior, agregue las líneas siguientes para extraer las claves y póngalos en una lista (en orden):Immediately after the above code, add the following lines to extract the keys and put them into a list (in order):

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

Pasar esta lista para la ArrayAdapter constructor (en lugar de la planets_array recursos):Pass this list to the ArrayAdapter constructor (instead of the planets_array resource):

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

Modificar spinner_ItemSelected para que la posición seleccionada se utiliza para buscar el valor (la temperatura) asociado con el planeta seleccionado:Modify spinner_ItemSelected so that the selected position is used to look up the value (the temperature) associated with the selected 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();
}

Ejecute la aplicación. la notificación del sistema debe tener este aspecto:Run the application; the toast should look like this:

Ejemplo de selección del planeta mostrar la temperaturaExample of planet selection displaying temperature

RecursosResources

Las partes de esta página son modificaciones en función de trabajo creado y compartido por el Android Open Source Project y usarse de acuerdo con los términos descritos en el licencia de atribución 2.5 de Creative Commons .Portions of this page are modifications based on work created and shared by the Android Open Source Project and used according to terms described in the Creative Commons 2.5 Attribution License.