19

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

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

4

2 に答える 2

36

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

/*************************************/
/* 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()を呼び出す必要があります。

于 2012-04-25T20:05:33.823 に答える
10

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

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);

    }

invalidateOptionsMenu();値を取得し、アクションバーのメニュー項目をリロードするために呼び出すたびに、hasRss値をtrueに設定する必要があります

于 2012-04-25T20:06:48.770 に答える