Aggiungi rotelline all'app

Le rotelline consentono di selezionare rapidamente un valore da un insieme. Nell'impostazione predefinita , una rotellina mostra il valore attualmente selezionato. Toccare la rotellina mostra un menu con tutti gli altri valori che l'utente può selezionare.

Figura 1. Un menu di una rotellina che mostra le opzioni disponibili e i relativi valori.

Puoi aggiungere una rotellina al layout con la Spinner , che di solito fai nel layout XML con un Elemento <Spinner>. come illustrato di seguito esempio:

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

Per compilare la rotellina con un elenco di opzioni, specifica un SpinnerAdapter nel tuo Activity o Fragment codice sorgente.

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

Completa la rotellina con le scelte dell'utente

Le scelte fornite per la rotellina possono provenire da qualsiasi fonte, ma tu devono fornirli tramite un SpinnerAdapter, ad esempio ArrayAdapter se le scelte sono disponibili in un array o in una CursorAdapter se le scelte sono disponibili da una query di database.

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

<?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 Activity o Fragment per fornire alla rotellina della 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);

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

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

Chiama setAdapter() per collegare l'adattatore a Spinner.

Rispondere alle selezioni degli utenti

Quando l'utente seleziona un elemento dal menu della rotellina, la Spinner oggetto riceve un evento selezionato sull'articolo.

Per definire il gestore di eventi di selezione per una rotellina, implementa la funzione AdapterView.OnItemSelectedListener e il corrispondente codice onItemSelected() di callback di Google. Ad esempio, ecco un'implementazione dell'interfaccia in una 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.
    }
}

La L'interfaccia AdapterView.OnItemSelectedListener richiede onItemSelected() e onNothingSelected() di callback di Google.

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 AdapterView.OnItemSelectedListener con il tuo Activity o Fragment, come nell'interfaccia nell'esempio precedente, puoi passare this come istanza dell'interfaccia.