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