让我们假设,我有两个活动。一个叫做 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);
}