2 つのアクティビティがあるとします。1 つは MainActivity と呼ばれ、もう 1 つは PopupActivity と呼ばれます。ユーザーが PopupActivity にアクセスした後、MainActivity にコンテキスト メニューを表示したいと考えています。
Main [no menu] --> startActivity() / startActivityForResult()
==> Popup --> back / finish()
==> Main [now has menu].
環境の詳細:
- minSDK: 10 (下位互換性のために必要)
- ターゲットSDK: 17
- 対象デバイス:GalaxyTab 2.0
MainActivity が開始状態で少なくとも 1 つの要素を持っている場合、onPrepareOptionsMenu を介して目的のメニュー項目を追加または削除できます。ただし、MainActiviy の内部にメニュー要素が 0 個ある場合、Android は右上隅にメニュー ボタンをレンダリングしません。
私の質問は:
- 何が恋しいですか?
- メニュー項目を追加したいので、Androidにメニューボタンをレンダリングするように指示する方法。
問題全体がもう少し複雑であるため、回避策の解決策は機能しません (アクティビティを 2 つに分割するなど) が、その核心はこれです。最初の状態ではメニュー項目は必要ありませんが、2 番目の状態では必要です。
main_menu.xml:
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/menu_add" android:title="@string/add"></item>
<item android:id="@+id/menu_remove" android:title="@string/remove" ></item>
</menu>
MainActivity.java
@Override
public boolean onCreateOptionsMenu(Menu menu)
{
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.main_menu, menu);
return true;
}
@Override
public boolean onPrepareOptionsMenu(Menu menu)
{
if (initState)
{
menu.findItem(R.id.menu_add).setVisible(false);
menu.findItem(R.id.menu_remove).setVisible(false);
} else
{
menu.findItem(R.id.menu_add).setVisible(true);
menu.findItem(R.id.menu_remove).setVisible(true);
}
return super.onPrepareOptionsMenu(menu);
}