21

最初に非表示の MenuItem を表示に切り替えることができないという基本的な問題があります。警告として、私は ActionBarSherlock を使用していますが、これが Android の既知の問題であるかどうか、またはこれが ABS 内の問題であるかどうかを調査する前に、何かひどいことをしているのかどうかを誰かが知っているかどうかを確認したかったのです。次のようにコードします。

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    MenuInflater inflater = getSupportMenuInflater();
    inflater.inflate(R.menu.menu_xml, menu);

    mMenuItem = menu.findItem(R.id.menu_item);
    mMenuItem.setVisible(false);

    return true;
}

// Somewhere elsewhere
// MenuItem is never visible after this line is executed
mMenuItem.setVisible(true);

また、mMenuItem の割り当てと可視性を onPrepareOptionsMenu の呼び出しに移動しようとしましたが、同じ動作が表示されます。

ありがとう!

4

4 に答える 4

26

問題は、メニューを更新する必要があることを Android に伝えていないことです。これにより、解決策が見つかるまで、最後の 1 時間は頭がおかしくなりました。メニュー項目が HC+ のように常に画面に表示されるとは限らないため、HC 以前ではそれほど明白ではないと思います。

アクティビティで、次のように呼び出します。

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
this.invalidateOptionsMenu();
}

これにより、 onCreateOptionsMenu() イベントの呼び出しが再度トリガーされるため、初期化のためにその関数で可視性を設定している場合は、オプションを表示するかどうかを考慮する必要があります。

于 2012-07-31T15:12:29.950 に答える
6

私は同じ問題を抱えていましたsetVisible(true)が、少なくとも別のものがMenuItem表示されている場合に機能することがわかりました。これが誰かの役に立てば幸いです。

于 2014-01-30T10:22:41.917 に答える
6

これは古い質問だと理解しています。
しかし、私はそれを内部に配置することで解決しましたonPrepareOptionMenu() {...}

private boolean mShowVisible=false;

@Override
public boolean onPrepareOptionsMenu(Menu menu) {

     menu.findItem(R.id.menu_item).setVisible(mShowVisible);

     return super.onPrepareOptionsMenu(menu);
}

可視に設定したいとき、または次のように呼び出したくないときはいつでも:

mShowVisible = true; // or false
invalidateOptionMenu();
于 2016-08-11T07:01:53.007 に答える