Come aggiungere elementi a uno spinner in Android?


107

Come aggiungere elementi a uno spinner?


1
Se vuoi aggiungere dinamicamente, aggiungi elementi al tuo elenco e chiama adapter.notifyDataSetChanged ()
asok Buzz

Risposte:


144

File XML:

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

File Java:

public class SpinnerExample extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        String[] arraySpinner = new String[] {
            "1", "2", "3", "4", "5", "6", "7"
        };
        Spinner s = (Spinner) findViewById(R.id.Spinner01);
        ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
                android.R.layout.simple_spinner_item, arraySpinner);
        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        s.setAdapter(adapter);
    }
}

Vedi esempio di spinner .


7
Sebbene questo possa teoricamente rispondere alla domanda, sarebbe preferibile includere qui le parti essenziali della risposta e fornire il collegamento per riferimento.
Bill the Lizard il

usa questo android.R.layout.simple_spinner_dropdown_item al posto di questo android.R.layout.simple_spinner_item sembra molto meglio
sai Gorantla

Cos'è array_spinner? il nome dell'array è arraySpinner. è un errore di ortografia o deve essere solo così>
SurajS

1
Considera l'idea di aggiungere adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);(prima s.setAdapter(adapter);per rendere migliore il menu a discesa.
ban-geoengineering

1
@StephenM ha cambiato il collegamento
pankajagarwal

99

Ho trovato un'altra opzione: la definizione dello spinner nel file di layout

<Spinner android:id="@+id/spinner"
    android:layout_width="fill_parent"
    android:drawSelectorOnTop="true"
    android:prompt="@string/spin"
    android:entries="@array/spinnerItems"
/>

Definizione degli elementi nel file array.xml:

<resources>
    <string-array name="spinnerItems">
        <item>item1</item>
        <item>item2</item>
        <item>item3</item>
        <item>item4</item>
    </string-array>
</resources>

Collegamento alla fonte completa del codice


Ho provato tutti i metodi sopra e alcuni altri tutorial, ma questo è l'unico che ha funzionato per me. Grazie mille!
snapplex

Felice di aiutarti @snapplex;)
maxivis

1
Questa dovrebbe essere la risposta migliore. Pulito.

30

Prova questo codice:

final List<String> list = new ArrayList<String>();
list.add("Item 1");
list.add("Item 2");
list.add("Item 3");
list.add("Item 4");
list.add("Item 5");

final String[] str = {"Report 1", "Report 2", "Report 3", "Report 4", "Report 5"};

final Spinner sp1 = (Spinner) findViewById(R.id.spinner1);
final Spinner sp2 = (Spinner) findViewById(R.id.spinner2);

ArrayAdapter<String> adp1 = new ArrayAdapter<String>(this,
                              android.R.layout.simple_list_item_1, list);
adp1.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
sp1.setAdapter(adp1);

ArrayAdapter<String> adp2 = new ArrayAdapter<String>(this,
                                  android.R.layout.simple_spinner_item, str);
adp2.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
sp2.setAdapter(adp2);

sp1.setOnItemSelectedListener(new OnItemSelectedListener()
    {
        @Override
        public void onItemSelected(AdapterView<?> arg0, View arg1, int position, long id) {
            // TODO Auto-generated method stub
            Toast.makeText(getBaseContext(), list.get(position), Toast.LENGTH_SHORT).show();
        }

        @Override
        public void onNothingSelected(AdapterView<?> arg0) {
            // TODO Auto-generated method stub
        }
    });

sp2.setOnItemSelectedListener(new OnItemSelectedListener()
    {
        @Override
        public void onItemSelected(AdapterView<?> arg0, View arg1, int position, long id) {
            // TODO Auto-generated method stub
            Toast.makeText(getBaseContext(), str[position], Toast.LENGTH_SHORT).show();
        }

        @Override
        public void onNothingSelected(AdapterView<?> arg0) {
            // TODO Auto-generated method stub
        }
    });

Puoi anche aggiungere il valore dell'elemento di selezione tramite il file xml dell'array di stringhe.

<resources>
    <string name="app_name">Spinner_ex5</string>
    <string name="hello_world">Hello world!</string>
    <string name="menu_settings">Settings</string>
    <string name="title_activity_main">MainActivity</string>
    <string-array name="str2">
        <item>Data 1</item>
        <item>Data 2</item>
        <item>Data 3</item>
        <item>Data 4</item>
        <item>Data 5</item>
    </string-array>
</resources>

In mainActivity.java:

final Spinner sp3 = (Spinner) findViewById(R.id.spinner3);
ArrayAdapter<CharSequence> adp3 = ArrayAdapter.createFromResource(this,
                                    R.array.str2, android.R.layout.simple_list_item_1);

adp3.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
sp3.setAdapter(adp3);
sp3.setOnItemSelectedListener(new OnItemSelectedListener()
    {
        @Override
        public void onItemSelected(AdapterView<?> arg0, View arg1, int position, long id) {
            // TODO Auto-generated method stub
            String ss = sp3.getSelectedItem().toString();
            Toast.makeText(getBaseContext(), ss, Toast.LENGTH_SHORT).show();
        }

        @Override
        public void onNothingSelected(AdapterView<?> arg0) {
            // TODO Auto-generated method stub
        }
    });

9

Per aggiungere elementi in Spinner, puoi fare una cosa, provare a creare un adattatore e quindi aggiungere / rimuovere elementi nell'adattatore, quindi puoi facilmente associare l'adattatore a spinner utilizzando il setAdapter()metodo.

Ecco un esempio:

spinner.setAdapter(adapter);
adapter.add(item1);
adapter.add(item2);
adapter.add(item3);
adapter.add(item4);
adapter.add(item5);
adapter.notifyDataSetChanged();
spinner.setAdapter(adapter);

grazie per la tua risposta ho ottenuto la soluzione anche ora sto affrontando un problema su di esso.

Voglio recuperare l'elemento selezionato di spinner, cioè la sua posizione, poiché voglio passarlo ad un altro metodo vedi cosa ho fatto ... dataspin.setOnItemSelectedListener (new myitemlistener ());

dataspin è il mio oggetto Spinner

@Override public void onItemSelected (AdapterView <?> Parent, View view, int position, long id) {// TODO Stub metodo generato automaticamente String p = parent.getItemAtPosition (position) .toString (); int pos = (int) parent.getItemIdAtPosition (position); System.out.println ("position of spinner ..." + pos); setSearchView (pos); }

se lo faccio, l'elemento spinner non viene visualizzato

8
<string-array name="array_name">
<item>Array Item One</item>
<item>Array Item Two</item>
<item>Array Item Three</item>
</string-array>

Nel tuo layout:

<Spinner 
        android:id="@+id/spinner"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:drawSelectorOnTop="true"
        android:entries="@array/array_name"
    />

ma allora come si ottiene l'articolo selezionato?
Demotivato l'

1
Primo TypeCast nel file Java. Quindi utilizzare Spinner spinner; filatore = findViewById (R.id.spinner); spinner.setOnItemClickListener (new AdapterView.OnItemClickListener () {@Override public void onItemClick (AdapterView <?> parent, View view, int position, long id) {}});
ZIA ANSARI

5

Questo codice fondamentalmente legge un oggetto array JSON e converte ogni riga in un'opzione nello spinner che viene passato come parametro:

public ArrayAdapter<String> getArrayAdapterFromArrayListForSpinner(ArrayList<JSONObject> aArrayList, String aField)
{
    ArrayAdapter<String> aArrayAdapter = new ArrayAdapter<String>(context, android.R.layout.simple_spinner_item);
    aArrayAdapter.setDropDownViewResource(R.layout.multiline_spinner_dropdown_item); //android.R.layout.simple_spinner_dropdown_item
    try {
        for (int i = 0; i < aArrayList.size(); i++)
        {
            aArrayAdapter.add(aArrayList.get(i).getString(aField)); 
        }
    } catch (JSONException e) {
        e.printStackTrace();
        ShowMessage("Error while reading the JSON list");
    }
    return aArrayAdapter;       
}

2

Aggiungi una casella di selezione al layout XML, quindi aggiungi questo codice al file Java:

Spinner spinner;
spinner = (Spinner) findViewById(R.id.spinner1) ;
java.util.ArrayList<String> strings = new java.util.ArrayList<>();
strings.add("Mobile") ;
strings.add("Home");
strings.add("Work");
SpinnerAdapter spinnerAdapter = new SpinnerAdapter(AddMember.this, R.layout.support_simple_spinner_dropdown_item, strings);
spinner.setAdapter(spinnerAdapter);

1

Aggiungi questo codice dopo aver aggiornato l'elenco

Supponiamo che:

Il nome della variabile ArrayAdapter <String> è dataAdapter e il nome della variabile List è keys .

  • dataAdapter.addAll (tasti);
  • dataAdapter.notifyDataSetChanged ();

1

Per aggiungere un altro elemento a Spinner puoi:

ArrayAdapter myAdapter = 
  ((ArrayAdapter) mySpinner.getAdapter());

myAdapter.add(myValue);

myAdapter.notifyDataSetChanged();

Si è verificata "UnsupportedOperationException"
abbasalim

0

È solo per cancellare l'adattatore, aggiungere tutti gli elementi e notificare la modifica come di seguito:

  public void show(List<Object> objLIst) {
    adapter.clear();
    adapter.addAll(objLIst);
    adapter.notifyDataSetChanged(); }

0

Un modo più semplice è utilizzare la libreria del filatore di materiali: https://github.com/jaredrummler/MaterialSpinner

prima aggiungi al tuo progetto:

compile 'com.jaredrummler:material-spinner:1.2.4'

e usa in questo modo:

<com.jaredrummler.materialspinner.MaterialSpinner
    android:id="@+id/spinner"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"/>

e codice java che puoi aggiungere elementi in java così facilmente:

MaterialSpinner spinner = (MaterialSpinner) findViewById(R.id.spinner);
spinner.setItems("item 1", "item 2", "item 3", "item 4", "item 5");
spinner.setOnItemSelectedListener(new MaterialSpinner.OnItemSelectedListener<String>() {

  @Override public void onItemSelected(MaterialSpinner view, int position, long id, String item) {
    Snackbar.make(view, "Clicked " + item, Snackbar.LENGTH_LONG).show();
  }
});
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.