9

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

4

3 に答える 3

24

Smok が指摘したように: を呼び出すことによってinvalidateOptionsMenu()

于 2012-09-13T12:48:14.573 に答える