私のアクティビティの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。