web-dev-qa-db-ja.com

実行時にアクションバーアイテムを追加するにはどうすればよいですか?

実行時にアクションバーアイテムを追加するにはどうすればよいですか?

actionBarSherlockを使用していますが、イベントが発生したときにいくつかのボタンを追加する必要があります(たとえば、RSSからいくつかのテキストを取得します)。固定xmlに頼ることはできません。

19
hdoria

次のようなコードでメニューを作成できます。

/*************************************/
/* Create the actionbar options menu */
/*************************************/
@Override
public boolean onCreateOptionsMenu(Menu menu)
{
    menu.add(0, 0, 0, "History").setIcon(R.drawable.ic_menu_recent_history)
            .setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);
    menu.add(0, 1, 0, "Settings").setIcon(R.drawable.ic_menu_manage)
            .setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);

    return true;
}

ブール値の内部チェック。

メニューを再作成するには、supportInvalidateOptionsMenu()を呼び出す必要があります。

35
Tony

ボタンを表示する必要があるかどうかを決定するフラグを維持できます

_boolean hasRss = false;
_

次に、メソッドonCreateOptionsMenu(Menu menu)をオーバーライドし、hasRssがtrueかfalseかを確認します。 trueの場合、ボタンを追加して何でもできます。次に、RSSがあるかどうかに関係なく、常に表示したい通常のボタンを追加できます。

_ @Override
    public boolean onCreateOptionsMenu(Menu menu)
    {
       if (hasRss)
       {
           menu.add(Menu.NONE, 0, Menu.NONE, "View RSS").setIcon(R.drawable.ic_menu_view)
                        .setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
       }

       menu.add(Menu.NONE, 1, Menu.NONE, "Normal button that is always there").setIcon(R.drawable.ic_menu_button)
                        .setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);

    }
_

値を取得するたびにhasRss値= trueを設定し、invalidateOptionsMenu();を呼び出してアクションバーメニュー項目を再読み込みする必要があります

9
dymmeh