0

I'm doing one project in Android and I want to add a second spinner in the same activity. It should be independent of first spinner.

How can I do it?

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Spinner;
import android.widget.TextView;
import android.widget.Toast;

import static android.R.layout.simple_dropdown_item_1line;
import static android.R.layout.simple_spinner_item;

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

        spinner=(Spinner) findViewById(R.id.spinner);
        ArrayAdapter adapter=ArrayAdapter.createFromResource(this, R.array.field_name, android.R.layout.simple_spinner_item);
        spinner.setAdapter(adapter);
        spinner.setOnItemSelectedListener(this);

    }


    @Override
    public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
        TextView myText= (TextView) view;
        Toast.makeText(this,"You have Selected "+ myText.getText(),Toast.LENGTH_SHORT).show();
    }

    @Override
    public void onNothingSelected(AdapterView<?> parent) {

    }



}

What needs to be done next?

kgandroid
  • 5,507
  • 5
  • 39
  • 69

2 Answers2

2

Create another spinner say spinner2

Then just repeat your code:

 spinner2=(Spinner) findViewById(R.id.spinner2);
 ArrayAdapter adapter2=ArrayAdapter.createFromResource(this, R.array.field_name, android.R.layout.simple_spinner_item);
    spinner2.setAdapter(adapter2);
    spinner2.setOnItemSelectedListener(this);

Dont forget to create another spinner i.e. spinner2 in your .xml as well.

The complete code:

 public class MainActivity extends AppCompatActivity  {
        Spinner spinner,spinner2;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);

            spinner=(Spinner) findViewById(R.id.spinner);
            ArrayAdapter adapter=ArrayAdapter.createFromResource(this,     R.array.field_name, android.R.layout.simple_spinner_item);
            spinner.setAdapter(adapter);


             spinner2=(Spinner) findViewById(R.id.spinner2);
             ArrayAdapter adapter2=ArrayAdapter.createFromResource(this, R.array.field_name, android.R.layout.simple_spinner_item);
            spinner2.setAdapter(adapter2);


    spinner.setOnItemSelectedListener(new OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> parentView, View selectedItemView, int position, long id) {
            // your code here
        }

        @Override
        public void onNothingSelected(AdapterView<?> parentView) {
            // your code here
        }

    });


    spinner2.setOnItemSelectedListener(new OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> parentView, View     selectedItemView, int position, long id) {
            // your code here
        }

        @Override
        public void onNothingSelected(AdapterView<?> parentView) {
            // your code here
        }

    });

     }

    }
kgandroid
  • 5,507
  • 5
  • 39
  • 69
  • oh thanks!!should have i to add those two override methods of spinner? – Kushal Reshamdalal Feb 11 '16 at 10:14
  • then just omit spinner2.setOnItemSelectedListener(this);/ spinner.setOnItemSelectedListener(this); and use this: http://stackoverflow.com/questions/1337424/android-spinner-get-the-selected-item-change-event – kgandroid Feb 11 '16 at 10:18
  • //now i have done this// spinner2.OnItemSelectedListener(new OnItemSelectedListener() { Override public void onItemSelected(AdapterView> parent, View view, int position, long id) { TextView myText1= (TextView) view; Toast.makeText(this,"You have Selected "+ myText1.getText(),Toast.LENGTH_SHORT).show(); } Override public void onNothingSelected(AdapterView> parent) { });but i m getting error for OnItemSelectedListener,parent,view what should i do now? – Kushal Reshamdalal Feb 11 '16 at 10:34
  • Import it..i mean you have to import OnItemSelectedListener – kgandroid Feb 11 '16 at 10:36
  • and if you go for the above approach then rempve the interface i.e. " implements AdapterView.OnItemSelectedListener " – kgandroid Feb 11 '16 at 10:36
  • sorry but i can't be able to understAnd what u r trying to say! – Kushal Reshamdalal Feb 11 '16 at 10:40
  • If you want to follow the approach provided in the lick then you must remove the interface which you have written in the first line i.e. implements AdapterView.OnItemSelectedListener – kgandroid Feb 11 '16 at 10:42
  • i have removed i.e. implements AdapterView.OnItemSelectedListener but i m getting same errors – Kushal Reshamdalal Feb 11 '16 at 10:44
  • which one?yes i have already checked one by removing implements AdapterView.OnItemSelectedListener!! – Kushal Reshamdalal Feb 11 '16 at 10:49
  • okay thanx!!! i have done that now errors r reduced and now i m getting error "Error:(32, 47) error: cannot find symbol class OnItemSelectedListener" for both OnItemSelectedListener – Kushal Reshamdalal Feb 11 '16 at 10:56
  • now just import android.widget.AdapterView.OnItemSelectedListener – kgandroid Feb 11 '16 at 11:01
  • okay tysm!! sry for disturbing but now i m getting this error "Error:(37, 45) error: cannot find symbol variable view" – Kushal Reshamdalal Feb 11 '16 at 11:04
  • Oh...you have to import each and every thing showing this error. – kgandroid Feb 11 '16 at 11:05
  • i have already imported view library, look i havre imported these ones//import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.AdapterView; import android.widget.ArrayAdapter; import android.widget.Spinner; import android.widget.TextView; import android.widget.Toast; import android.widget.AdapterView.OnItemSelectedListener; – Kushal Reshamdalal Feb 11 '16 at 11:08
1

Add another Spinner to your XML and same ways declare and initialise it .

Spinner spinner1 , spinner2;

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

        spinner1=(Spinner) findViewById(R.id.spinner1);
        spinner2=(Spinner) findViewById(R.id.spinner2);
        ArrayAdapter adapter1=ArrayAdapter.createFromResource(this, R.array.field_name, android.R.layout.simple_spinner_item);
        ArrayAdapter adapter2=ArrayAdapter.createFromResource(this, R.array.field_name, android.R.layout.simple_spinner2_item);
        spinner1.setAdapter(adapter);
        spinner2.setAdapter(adapter2);
        spinner1.setOnItemSelectedListener(this);
        spinner2.setOnItemSelectedListener(this);

        }

You don't need to override separate methods for each spinner in same layout.following will work for both spinner1 and spinner2 . you can implement check to get to know item of which spinner is selected

 @Override
    public void onItemSelected(AdapterView<?> parentView, View view, int position, long id) {
      Spinner spinner = (Spinner) parentView;
     if(spinner.getId() == R.id.spinner1){
               //do this                
        }
     else if(spinner.getId() == R.id.spinner2){
              //do this
        }
    }

    @Override
    public void onNothingSelected(AdapterView<?> parent) {
    // your code here
  }

Remember that for one spinner, OnItemSelectedListener event will execute twice -

  1. Spinner initialization
  2. User selected any item manually

You can differentiate those two by using flag variable.

Salman Nazir
  • 2,759
  • 2
  • 28
  • 42