如果初始菜单大小为零,则无法单击“选项菜单”

时间:2013-03-05 11:43:53

标签: android android-4.0-ice-cream-sandwich options-menu

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

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

环境详情:

  • minSDK:10(向后兼容所需)
  • targetSDK:17
  • targetDevice:GalaxyTab 2.0

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

我的问题是:

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

变通办法灵魂不起作用(比如将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);
}

1 个答案:

答案 0 :(得分: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;
}