実行時にアクションバーアイテムを追加するにはどうすればよいですか?
actionBarSherlock
を使用していますが、イベントが発生したときにいくつかのボタンを追加する必要があります(たとえば、RSSからいくつかのテキストを取得します)。固定xmlに頼ることはできません。
次のようなコードでメニューを作成できます。
/*************************************/
/* 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()を呼び出す必要があります。
ボタンを表示する必要があるかどうかを決定するフラグを維持できます
_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();
を呼び出してアクションバーメニュー項目を再読み込みする必要があります