1

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

1 に答える 1

1

最初に 2 つのメニューを作成します。1 つは初期段階用、2 番目は訪問後の PopupActivity 用です。

onCreateOptionsMenu() を次のように置き換えます

@Override
public boolean onCreateOptionsMenu(Menu menu)
{
    MenuInflater inflater = getMenuInflater();

   if (initState)
       inflater.inflate(R.menu.invisible_main_menu, menu);
   else
       inflater.inflate(R.menu.visible_main_menu, menu);

    return true;
}
于 2013-03-05T11:53:00.157 に答える