120

How to add items to a spinner?

Samet ÖZTOPRAK
  • 3,112
  • 3
  • 32
  • 33

11 Answers11

167

XML file:

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

Java file:

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);
    }
}

See spinner example.

soshial
  • 5,906
  • 6
  • 32
  • 40
pankajagarwal
  • 13,462
  • 14
  • 54
  • 65
  • 7
    While this may theoretically answer the question, [it would be preferable](http://meta.stackexchange.com/q/8259) to include the essential parts of the answer here, and provide the link for reference. – Bill the Lizard Jan 26 '12 at 21:00
  • use this android.R.layout.simple_spinner_dropdown_item in place of this android.R.layout.simple_spinner_item it looks lot better – sai Gorantla Jun 04 '14 at 17:33
  • What is array_spinner? name of the array is arraySpinner. is it spelling mistake or it has to be like that only> – SurajS Feb 03 '15 at 09:22
  • `this` have to be replace by a `Context` object if you want to use this outside of an `Activity` object. – Emrys Myrooin Aug 10 '16 at 08:04
  • 2
    Consider adding `adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);` (before `s.setAdapter(adapter);` to make the dropdown look better. – ban-geoengineering May 21 '17 at 10:39
  • 1
    @StephenM changed the link – pankajagarwal Jul 14 '18 at 20:21
127

I've found another option: spinner definition in the layout file

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

Items definition in the file array.xml:

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

Link to the full source of the code

Peter Mortensen
  • 30,738
  • 21
  • 105
  • 131
maxivis
  • 1,727
  • 3
  • 21
  • 35
33

Try this code:

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
        }
    });

You can also add spinner item value through String array xml file..

<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
        }
    });
Peter Mortensen
  • 30,738
  • 21
  • 105
  • 131
Balaji
  • 2,024
  • 17
  • 13
10
<string-array name="array_name">
<item>Array Item One</item>
<item>Array Item Two</item>
<item>Array Item Three</item>
</string-array>

In your layout:

<Spinner 
        android:id="@+id/spinner"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:drawSelectorOnTop="true"
        android:entries="@array/array_name"
    />
PRATEEK BHARDWAJ
  • 2,364
  • 2
  • 21
  • 35
  • but then how do you get the selected item? – Demotivated Mar 08 '18 at 11:01
  • 1
    First TypeCast in Java file. Then use Spinner spinner; spinner=findViewById(R.id.spinner); spinner.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView> parent, View view, int position, long id) { } }); – ZIA ANSARI Mar 24 '18 at 11:24
9

For adding item in Spinner, you can do one thing, try to create an adapter and then add/remove items into the adapter, then you can easily bind that adapter to spinner by using setAdapter() method.

Here is an example:

spinner.setAdapter(adapter);
adapter.add(item1);
adapter.add(item2);
adapter.add(item3);
adapter.add(item4);
adapter.add(item5);
adapter.notifyDataSetChanged();
spinner.setAdapter(adapter);
Paresh Mayani
  • 127,700
  • 71
  • 241
  • 295
  • thanx for ur reply i got the solution also now i am facing one problem on it. –  Mar 09 '11 at 08:03
  • I want to fetch the selected item of spinner i.e its position as further i want to pass it to other method see what i did... dataspin.setOnItemSelectedListener(new myitemlistener()); –  Mar 09 '11 at 08:06
  • dataspin is my Spinner object –  Mar 09 '11 at 08:07
  • @Override public void onItemSelected(AdapterView> parent, View view, int position, long id) { // TODO Auto-generated method stub String p=parent.getItemAtPosition(position).toString(); int pos=(int) parent.getItemIdAtPosition(position); System.out.println("position of spinner..."+pos); setSearchView(pos); } –  Mar 09 '11 at 08:08
  • if i do this than spinner item is not displaying –  Mar 09 '11 at 08:09
  • notifyDataSetChanged(); Before you set the adapter?Are you serious? – Steve Moretz Mar 17 '19 at 09:23
6

This code basically reads a JSON array object and convert each row into an option in the spinner that is passed as a parameter:

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;       
}
NaN
  • 8,596
  • 20
  • 79
  • 153
2

Add a spinner to the XML layout, and then add this code to the Java file:

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);
Bakyt
  • 1,268
  • 11
  • 10
Hossein
  • 314
  • 3
  • 12
1

Add this code after updating the list

Suppose:

The ArrayAdapter<String> variable name is dataAdapter, and the List variable name is keys.

  • dataAdapter.addAll(keys);
  • dataAdapter.notifyDataSetChanged();
Peter Mortensen
  • 30,738
  • 21
  • 105
  • 131
Pankaj Malviya
  • 109
  • 1
  • 3
1

An easier way is to use the material spinner library: https://github.com/jaredrummler/MaterialSpinner

first add to your project:

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

and use like this:

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

and java code that you can add items in java so easy:

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();
  }
});
sajad abbasi
  • 1,988
  • 2
  • 22
  • 43
1

To add one more item to Spinner you can:

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

myAdapter.add(myValue);

myAdapter.notifyDataSetChanged();
Zon
  • 18,610
  • 7
  • 91
  • 99
0

It's just to clear the adapter, add all itens and notify change like below:

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