Reputation: 13839
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
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
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
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
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
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