Aggiungi rotelline all'app

Le rotelline consentono di selezionare rapidamente un valore da un insieme. Nello stato predefinito, viene visualizzata una rotellina che mostra il valore attualmente selezionato. Toccando l'icona di rotazione viene visualizzato un menu che mostra tutti gli altri valori che l'utente può selezionare.

Figura 1. Un menu con una rotellina che mostra i valori disponibili.

Puoi aggiungere un'icona di rotazione al layout con l'oggetto Spinner. Questa operazione di solito nel layout XML prevede un elemento <Spinner>. Ciò è illustrato nel seguente esempio:

<Spinner
    android:id="@+id/planets_spinner"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" />

Per completare l'elenco di opzioni, specifica un SpinnerAdapter nel codice sorgente Activity o Fragment.

Se utilizzi i componenti di Material Design, i menu a discesa esposti equivalgono a Spinner.

Compila la ruota che gira con le scelte dell'utente

Le opzioni fornite per lo rotellina possono provenire da qualsiasi origine, ma devi fornirle tramite un SpinnerAdapter, ad esempio un ArrayAdapter se le scelte sono disponibili in un array o un CursorAdapter se le scelte sono disponibili da una query di database.

Ad esempio, se le opzioni disponibili per la rotellina sono predeterminate, puoi fornire un array di stringhe definito in un file di risorse di stringa:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <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>

Con un array come questo, puoi utilizzare il seguente codice in Activity o Fragment per fornire allo spinner l'array utilizzando un'istanza di ArrayAdapter:

Kotlin

val spinner: Spinner = findViewById(R.id.planets_spinner)
// Create an ArrayAdapter using the string array and a default spinner layout.
ArrayAdapter.createFromResource(
        this,
        R.array.planets_array,
        android.R.layout.simple_spinner_item
).also { adapter ->
    // Specify the layout to use when the list of choices appears.
    adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item)
    // Apply the adapter to the spinner.
    spinner.adapter = adapter
}

Java

Spinner spinner = (Spinner) findViewById(R.id.planets_spinner);
// Create an ArrayAdapter using the string array and a default spinner layout.
ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(
        this,
        R.array.planets_array,
        android.R.layout.simple_spinner_item
);
// Specify the layout to use when the list of choices appears.
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
// Apply the adapter to the spinner.
spinner.setAdapter(adapter);

Il metodo createFromResource() consente di creare un elemento ArrayAdapter dall'array di stringhe. Il terzo argomento per questo metodo è una risorsa di layout che definisce il modo in cui la scelta selezionata viene visualizzata nel controllo della rotellina. La piattaforma fornisce il layout simple_spinner_item. Questo è il layout predefinito, a meno che tu non voglia definire un layout personale per l'aspetto della ruota che gira.

Chiama setDropDownViewResource(int) per specificare il layout utilizzato dall'adattatore per visualizzare l'elenco di opzioni della rotellina. simple_spinner_dropdown_item è un altro layout standard definito dalla piattaforma.

Chiama setAdapter() per applicare l'adattatore al tuo Spinner.

Rispondere alle selezioni degli utenti

Quando l'utente seleziona un elemento dal menu della rotellina, l'oggetto Spinner riceve un evento relativo alla voce selezionata.

Per definire il gestore di eventi di selezione per una rotellina, implementa l'interfaccia AdapterView.OnItemSelectedListener e il metodo di callback onItemSelected() corrispondente. Ad esempio, ecco un'implementazione dell'interfaccia in un Activity:

Kotlin

class SpinnerActivity : Activity(), AdapterView.OnItemSelectedListener {
    ...
    override fun onItemSelected(parent: AdapterView<*>, view: View?, pos: Int, id: Long) {
        // An item is selected. You can retrieve the selected item using
        // parent.getItemAtPosition(pos).
    }

    override fun onNothingSelected(parent: AdapterView<*>) {
        // Another interface callback.
    }
}

Java

public class SpinnerActivity extends Activity implements OnItemSelectedListener {
    ...
    public void onItemSelected(AdapterView<?> parent, View view,
            int pos, long id) {
        // An item is selected. You can retrieve the selected item using
        // parent.getItemAtPosition(pos).
    }

    public void onNothingSelected(AdapterView<?> parent) {
        // Another interface callback.
    }
}

L'interfaccia AdapterView.OnItemSelectedListener richiede i metodi di callback onItemSelected() e onNothingSelected().

Specifica l'implementazione dell'interfaccia chiamando setOnItemSelectedListener():

Kotlin

val spinner: Spinner = findViewById(R.id.planets_spinner)
spinner.onItemSelectedListener = this

Java

Spinner spinner = (Spinner) findViewById(R.id.planets_spinner);
spinner.setOnItemSelectedListener(this);

Se implementi l'interfaccia AdapterView.OnItemSelectedListener con Activity o Fragment, come nell'esempio precedente, puoi passare this come istanza dell'interfaccia.