ナビゲーションにアクション バーのスピナーを使用しています。問題は、選択したアイテムが以前に選択したアイテムと同じ場合、 onNavigationItemSelectedが呼び出されないことです。私は同様の質問をこことここ とここで見まし たが、アクションバー内の必要なドロップダウンナビゲーションに固有の実用的な解決策を提供するものはありません.
次のコードを使用しています。
public class TestSpinner extends Activity implements
ActionBar.OnNavigationListener {
private Integer mPosition;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
final ActionBar actionBar = getActionBar();
final String[] EventTypes = getResources().getStringArray(
R.array.spinner_items);
mPosition = -1;
ArrayAdapter<String> adapter = new ArrayAdapter<String>(
actionBar.getThemedContext(),
android.R.layout.simple_spinner_item, android.R.id.text1,
EventTypes);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
actionBar.setListNavigationCallbacks(adapter, this);
actionBar.setDisplayHomeAsUpEnabled(true);
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST);
....
@Override
public boolean onNavigationItemSelected(int position, long id) {
if (mPosition > -1) {
mPosition = position;
// execute required code on spinner item selection
return true;
} else {
mPosition = 0;
return false;
}
}
アクション バーが最初に作成されたときに onNavigationItemSelected がコードを実行するのを防ぐために、mPosition フラグを使用していることに注意してください。それを行うためのよりエレガントで推奨される方法があるのだろうか?
ただし、重要な問題は、アクション バーの同じスピナー項目が再選択されたときに onNavigationItemSelected へのコールバックを生成する方法です。