xain
xain

Reputation: 13839

Multiple spinners and onItemSelected

I have two spinners that trigger the onItemSelected event. The question is How can I know which one triggered such event ? So far I tried:

 public void onItemSelected(AdapterView<?> parent, View view, int position, long id) 
{

    Log.d("form","onitemselected");
    switch (view.getId()) {
    case R.id.region_spinner:
        Region r = (Region)sregions.getSelectedItem();
        Log.d("form","regionid:" + r.id);
        break;
    case R.id.state_spinner:
        Log.d("form","state id:");
        break;
    }

But only the first Log is displayed, so there's no match in the switch.

Upvotes: 43

Views: 29327

Answers (5)

Moh_beh
Moh_beh

Reputation: 257

At first in onCreate :

Spinner cit_for_bus,  bus_number;
cit_for_bus = (Spinner) findViewById(R.id.cit_for_bus);
bus_number = (Spinner) findViewById(R.id.bus_number);
cit_for_bus.setOnItemSelectedListener(this);
bus_number.setOnItemSelectedListener(this);

don't forget to use : you have to bind/tie spinners to onItemSelected

cit_for_bus.setOnItemSelectedListener(this);
bus_number.setOnItemSelectedListener(this);

and use implement for class :

public class MainActivity extends AppCompatActivity implements AdapterView.OnItemSelectedListener

outSide of onCreate use this :

@Override
    public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
        if (adapterView.getId() == R.id.cit_for_bus) {

            Toast.makeText(getApplicationContext(), adapterView.getId() + "/ " + adapterView.getCount() + "/" + adapterView.getSelectedItem(), Toast.LENGTH_LONG).show();

        } else if (adapterView.getId() == R.id.bus_number) {
            Toast.makeText(getApplicationContext(), adapterView.getId() + "/ " + adapterView.getCount() + "/" + adapterView.getSelectedItem(), Toast.LENGTH_LONG).show();

        }
    }

Upvotes: 1

Aditya Patil
Aditya Patil

Reputation: 1486

Use below code if you have multiple spinners in one activity and you are using onItemSelected override method

override fun onItemSelected(parent: AdapterView<*>?, view: View?, position: Int, id: Long) {
         if (parent!!.id == R.id.spinner_1) {
            // first spinner selected
         } else if (parent!!.id == R.id.spinner_2) {
            // second spinner selected
         }
    }

either you can use switch case

Upvotes: 7

Dan Zeevi
Dan Zeevi

Reputation: 21

If you import your XML on Kotlin you can use it as so:

override fun onItemSelected(parent: AdapterView<*>?, view: View?, position: Int, id: 
Long) {
when (parent)
    firstSpinner -> {
        // first spinner selection
        }
    secondSpinner -> {
        // second spinner selected
        }
    }
}

Upvotes: 0

Jems
Jems

Reputation: 11620

Spinner is a subclass of AdapterView. The parent object passed into the method is the spinner in which the item was selected.

Upvotes: 3

xandy
xandy

Reputation: 27411

use:

switch(parent.getId()) {
    ...
}

instead is what you need. The view in your parameter is the actual 'row' (i.e. the clicked child of spinner item), and the parent is the actual 'spinner' that you are after.

Upvotes: 93

Related Questions