1

让我们假设,我有两个活动。一个叫做 MainActivity,另一个叫做 PopupActivity。在用户访问 PopupActivity 后,我想在 MainActivity 中有一个上下文菜单。

    Main [no menu] --> startActivity() / startActivityForResult() 
    ==> Popup --> back / finish() 
    ==> Main [now has menu].

环境细节:

  • minSDK:10(向后兼容所需)
  • 目标SDK:17
  • 目标设备:GalaxyTab 2.0

如果 MainActivity 在开始状态下至少有一个元素,我可以通过 onPrepareOptionsMenu 添加/删除所需的菜单项。但是如果 MainActiviy 里面有 0 个菜单元素,android 甚至不会渲染右上角的菜单按钮。

我的问题是:

  • 我想念什么?
  • 如何告诉 android,渲染菜单按钮,因为我想向它添加菜单项。

workaround soultions 是行不通的(比如把Activity分成两个等等),因为整个问题有点复杂,但核心就是这个。我不需要在开始状态的菜单项,我需要它们在第二个。

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

首先创建两个菜单。一个用于初始阶段,第二个用于访问 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 回答