この方法でSpinnerをアクションバーに入れることができます。 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>
Res/menu /main.xml内
<item
Android:id="@+id/menuSort"
Android:actionLayout="@layout/spinner"
Android:showAsAction="ifRoom"
Android:title="@string/choose"/>
Res/layout /spinner.xml内
<Spinner
Android:id="@+id/spinner"
Android:layout_width="150dp"
Android:layout_height="wrap_content"
Android:entries="@array/languages"/>
そして最後にアクティビティクラス。
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;
}
}
私が得ていないのは、スピナーアイテムのItemSelectedでは何も起こりません。私のxmlファイルからわかるように、スピナーを取得するためにアダプターさえ必要ありません。しかし、私はアダプターを使用して、OnItemSelectedを取得します。ここで何が起こったのか教えてください。
これを試してみてください
@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);
}