Reputation: 309
I am able to get Spinner in action bar this way; array of items in re/values/languages.xml
<string-array name="languages">
<item>Finnish</item>
<item>French</item>
<item>German</item>
<item>Slovakian</item>
<item>Polish</item>
</string-array>
In res/menu/main.xml
<item
android:id="@+id/menuSort"
android:actionLayout="@layout/spinner"
android:showAsAction="ifRoom"
android:title="@string/choose"/>
In res/layout/spinner.xml
<Spinner
android:id="@+id/spinner"
android:layout_width="150dp"
android:layout_height="wrap_content"
android:entries="@array/languages"/>
And finally activity class;
public class Base_Activity extends Activity {
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
final Spinner spinner = new Spinner(this);
Log.i("DEBUG1", "CHECKPOINT1");
ArrayAdapter<String> spinnerArrayAdapter = new ArrayAdapter<String>(
this, android.R.layout.simple_spinner_dropdown_item);
spinner.setAdapter(spinnerArrayAdapter);
Log.i("DEBUG2", "CHECKPOINT2");
spinnerArrayAdapter.setDropDownViewResource(0);
spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> arg0, View arg1,
int arg2, long arg3) {
String items=spinner.getSelectedItem().toString();
Log.i("Selected item : ",items);
}
@Override
public void onNothingSelected(AdapterView<?> arg0) {
// TODO Auto-generated method stub
}
});
return true;
}
}
What I am not getting is on ItemSelected of spinner items nothing happens. As you can see from my xml file that I do not even need Adapter to get the spinner. But I am using adapter to so something to get OnItemSelected. Please help me what has happened here?
Upvotes: 8
Views: 32017
Reputation: 28484
try this may helps you
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
final Spinner spinner = (Spinner) menu.getItem(0).getActionView().findViewById(R.id.spinner);
spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
String items = spinner.getSelectedItem().toString();
Log.i("Selected item : ", items);
}
@Override
public void onNothingSelected(AdapterView<?> arg0) {
}
});
return super.onCreateOptionsMenu(menu);
}
Upvotes: 22
Reputation: 8101
You have to add OnItemClickListener
and not OnItemSelectedListener
if you want the click event.
Your method will only work if you select your items or browse through the view using a trackball or up/down arrows. If you want click, then add OnItemClickListener
and override
public void onItemClick(AdapterView<?> arg0, View arg1,
int arg2, long arg3)
Upvotes: 0