0

私の問題は、アイコンを MenuItem から Visible から Visible に変更したいということですが、これはもちろん onOptionsItemSelected を経由する必要があります。メニューを呼び出すと、クリックされた MenuItem が取得されますが、別のものを非表示にする必要があります。また、MenuItem と findViewById の定義も確認しましたが、ビューではないため機能しませんでした。より明確にするために、コードの一部をお見せしましょう。

@Override
public boolean onOptionsItemSelected(MenuItem menu) {
    switch (menu.getItemId()) {
    case R.id.menu_refresh:
        // Stuff
    case R.id.menu_settings:
        (Somehow point to R.id.menu_refresh).setVisible(false);
    }
    return super.onOptionsItemSelected(menu);
}

何か案は?

4

2 に答える 2

1

2.3スタイルのメニューを実行している場合は、onOptionsItemSelectedで変更しないでください。次回メニューを起動したときにonPrepareOptionsMenuで実行します(保存するのに適切なデータを保存することにより)。

アクションバーがある場合は、アクティビティでinvalidateOptionsMenuを呼び出してメニューを再ロードし、create関数で無効化を行う必要があります。

于 2013-03-18T16:30:16.263 に答える
1

docsから読んだこと、この場合の特別な方法があります: onPrepareOptionsMenu(Menu menu).

画面の標準オプションメニューを表示する準備をします。これは、メニューが表示されるたびに、メニューが表示される直前に呼び出されます。このメソッドを使用して、アイテムを効率的に有効/無効にしたり、コンテンツを動的に変更したりできます。

したがって、次のようになります。

@Override
public boolean onOptionsItemSelected(MenuItem menu) {
    switch (menu.getItemId()) {
    case R.id.menu_refresh:
        // Stuff
    case R.id.menu_settings:
        showRefresh = false;
        //Stuff
    }
    return super.onOptionsItemSelected(menu);
}
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
    menu.findItem(R.id.menu_refresh).setVisible(showRefresh);
    return super.onPrepareOptionsMenu(menu);
}
于 2013-03-18T16:32:42.057 に答える