Spinner Android – lista a discesa

Questo tutorial ti fornirà un’esperienza pratica nell’uso dello Spinner di Android come menu a discesa, nel passare dati tramite bundle Android e nel mostrare una notifica popup utilizzando toast Android. Creeremo un’applicazione Android composta da uno Spinner semplice che consente di selezionare un elemento da un elenco a discesa. Visualizzeremo dati statici nello Spinner. La selezione di un elemento dallo Spinner mostrerà un messaggio toast. Per passare dati sotto forma di bundle tra le attività, utilizzeremo un pulsante per eseguire un intent e visualizzare i dati passati alla schermata successiva.

Android Spinner

Lo Spinner di Android è semplicemente un elenco a discesa simile a quello che si vede in altri linguaggi di programmazione come nelle pagine HTML. In Android, lo Spinner viene utilizzato per selezionare un valore da un insieme di valori. Nello stato predefinito, uno Spinner mostra il valore attualmente selezionato. Toccando lo Spinner si apre un menu a discesa con tutti gli altri valori disponibili, da cui l’utente può selezionarne uno nuovo. Lo spinner Android è associato a AdapterView. Quindi dobbiamo impostare la classe dell’adattatore con lo Spinner.

Elenco a discesa Android

Il seguente file xml mostra il layout di un tipico spinner in Android, che è composto da un’etichetta di testo e da un tag di elemento spinner.

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="https://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:padding="10dip"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content">
    
    <!-- Text Label -->
    <TextView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="10dip"
        android:text="Category:"
        android:layout_marginBottom="5dp"
    />
    
    <!-- Spinner Element -->
    <Spinner 
        android:id="@+id/spinner"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:prompt="@string/spinner_title"
    />
</LinearLayout>

Il frammento seguente mostra come utilizzare uno spinner nella classe di attività.

Spinner spinner = (Spinner) findViewById(R.id.spinner);

Sviluppiamo un’applicazione in cui passiamo il valore selezionato dallo spinner allo schermo successivo utilizzando i Bundles e visualizziamo un messaggio Toast del valore selezionato nello stesso momento.

Struttura del progetto di esempio Spinner Android

L’immagine seguente mostra il progetto di Android Studio per l’esempio dello spinner. Iniziamo con il layout della classe MainActivity. Dobbiamo solo aggiungere un pulsante al file basic_spinner.xml.

<RelativeLayout xmlns:android="https://schemas.android.com/apk/res/android"
    xmlns:tools="https://schemas.android.com/tools" android:layout_width="match_parent"
    android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity">


    <LinearLayout
        android:orientation="vertical"
        android:padding="10dip"
        android:id="@+id/linear_layout"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content">

        <!-- Text Label -->
        <TextView
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="10dip"
            android:text="Category:"
            android:layout_marginBottom="5dp"
            />

        <!-- Spinner Element -->
        <Spinner
            android:id="@+id/spinner"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:prompt="@string/spinner_title"
            />
    </LinearLayout>

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="NEXT"
        android:id="@+id/button"
        android:layout_alignParentBottom="true"
        android:layout_centerHorizontal="true"
        android:layout_marginBottom="137dp" />


</RelativeLayout>

Il layout della classe SecondActivity è il seguente:

<RelativeLayout xmlns:android="https://schemas.android.com/apk/res/android"
    xmlns:tools="https://schemas.android.com/tools" android:layout_width="match_parent"
    android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity">


    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceMedium"
        android:text="Empty"
        android:id="@+id/txt_bundle"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="103dp" />
</RelativeLayout>

Ecco il file Manifest di Android. AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="https://schemas.android.com/apk/res/android"
    package="journaldev.com.spinners" >

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name=".MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:name=".SecondActivity"/>
    </application>

</manifest>

Le classi Java MainActivity e SecondActivity sono definite come segue.

package journaldev.com.spinners;

import android.app.Activity;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.Spinner;
import android.widget.Toast;

import java.util.ArrayList;
import java.util.List;

public class MainActivity extends Activity implements AdapterView.OnItemSelectedListener {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // Elemento Spinner
        final Spinner spinner = (Spinner) findViewById(R.id.spinner);
        Button button=(Button)findViewById(R.id.button);

        // Ascoltatore del clic sullo Spinner
        spinner.setOnItemSelectedListener(this);

        // Elementi a discesa dello Spinner
        List categories = new ArrayList();
        categories.add("Item 1");
        categories.add("Item 2");
        categories.add("Item 3");
        categories.add("Item 4");
        categories.add("Item 5");
        categories.add("Item 6");

        // Creazione dell'adattatore per lo Spinner
        ArrayAdapter dataAdapter = new ArrayAdapter(this, android.R.layout.simple_spinner_item, categories);

        // Stile del layout a discesa - vista dell'elenco con pulsante radio
        dataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);

        // Collegamento dell'adattatore dati allo Spinner
        spinner.setAdapter(dataAdapter);

        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent= new Intent(MainActivity.this,SecondActivity.class);
                intent.putExtra("data",String.valueOf(spinner.getSelectedItem()));
                startActivity(intent);
            }
        });
    }

    @Override
    public void onItemSelected(AdapterView parent, View view, int position, long id) {
        // Alla selezione di un elemento dello Spinner
        String item = parent.getItemAtPosition(position).toString();

        // Mostrare l'elemento dello Spinner selezionato
        Toast.makeText(parent.getContext(), "Selected: " + item, Toast.LENGTH_LONG).show();

    }

    public void onNothingSelected(AdapterView arg0) {
        // Metodo stub generato automaticamente TODO

    }

}
package journaldev.com.spinners;

import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;

public class SecondActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.second_activity);

        TextView  textView=(TextView) findViewById(R.id.txt_bundle);
        Bundle bundle=getIntent().getExtras();
        String data=bundle.get("data").toString();
        textView.setText(data);
    }
}

Nel codice sopra, abbiamo visualizzato un toast quando viene selezionato un elemento dal menu a discesa dell’elemento giratorio. Al clic del pulsante passiamo l’elemento spinner selezionato come valore stringa alla prossima attività utilizzando il bundle android. Quindi i dati vengono recuperati dal bundle e visualizzati in un TextView. Veloce, facile e semplice, non è vero? Le schermate dell’app sono mostrate di seguito. Sto eseguendo tutto su uno degli emulatori. La prima schermata mostra i contenuti della lista a discesa quando lo Spinner viene aperto. Dopo che viene selezionato un elemento, compare un messaggio di notifica toast per un po’ di tempo. Dopo un po’ il messaggio di notifica toast scompare come mostrato nell’immagine sotto. Non ci impedisce di fare clic sul pulsante successivo. Infine, nella seconda schermata, l’elemento selezionato dalla lista a discesa viene recuperato utilizzando i Bundles e visualizzato nel TextView. Di seguito è riportato un esempio di esecuzione della nostra applicazione di esempio spinner android nell’emulatore. Questo è tutto per ora, esamineremo Android ListView nel prossimo post. Puoi scaricare il progetto di esempio Android Spinner, Bundle e Toast dal link sottostante.

Scarica il progetto di esempio Android Spinner, Bundle e Toast

Riferimento: Documentazione Ufficiale

Source:
https://www.digitalocean.com/community/tutorials/android-spinner-drop-down-list