私のアクティビティのonCreateOptionsMenu
方法では、メニュー レイアウト ファイルを膨張させて添付するだけです。
グローバル変数の値に基づいていくつかのメニュー項目を表示/非表示にしたいのですが、onPrepareOptionsMenu
メソッドでこれを行います。これが正しい場所であることを読みました。
私のonPrepareOptionsMenu
メソッドは常に起動するとは限りません。理由はわかりませんが、携帯電話の「メニュー」ボタンを押しても、常に起動するとは限りません。内部の状態が関係しているのかもしれません。
アクティビティが作成されているときに発火するようです。「メニュー」ボタンを初めて押しても起動しませんが、もう一度メニューボタンを押すと問題なく動作します。
onPrepareOptionsMenu
強制的に発火させる方法はありますか?
ありがとう
Smok は、invalidateOptionsMenu
メソッドを使用してメニュー項目を無効にすることを提案しましたが、これによりonCreateOptionsMenu
メソッドも起動します。これが私の方法です:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
System.out.println("onCreate");
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.search, menu);
SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
SearchView searchView = (SearchView) menu.findItem(R.id.search).getActionView();
searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));
searchView.setIconified(false);
searchView.requestFocusFromTouch();
return true;
}
@Override
public boolean onPrepareOptionsMenu (Menu menu) {
System.out.println("prepared");
if (this.objAdapter == null) {
menu.findItem(R.id.sort).setVisible(false);
menu.findItem(R.id.filter).setVisible(false);
menu.findItem(R.id.group).setVisible(false);
} else {
menu.findItem(R.id.sort).setVisible(true);
menu.findItem(R.id.filter).setVisible(true);
menu.findItem(R.id.group).setVisible(true);
}
return true;
}
私のメソッドからわかるようにonCreateOptionsMenu
、もう一度呼び出すと、フォーカスが に失われますSearchView
。