在我的Activity的某些方法中,我想要检查菜单的标题或者知道它是否被选中。我该如何获取Activity的菜单?我需要像
this.getMenu()
这样的东西。this.getMenu()
这样的东西。要小心使用invalidateOptionsMenu()
。它会重新创建整个菜单,这会带来很大的开销,并会重置嵌入式组件,如SearchView
。我花了很长时间才找出为什么我的SearchView
会“随机”关闭。
最终,我采用了Dark发布的方法,先捕获菜单,然后根据需要调用onPrepareOptionsMenu(Menu)
。 这样符合我的要求而没有任何负面影响。注意:确保在菜单创建之前进行空值检查,以防在调用onPrepareOptionsMenu()
时菜单还未被创建。我是这样做的:
private Menu mOptionsMenu;
@Override
public boolean onCreateOptionsMenu(final Menu menu) {
mOptionsMenu = menu
...
}
private void updateOptionsMenu() {
if (mOptionsMenu != null) {
onPrepareOptionsMenu(mOptionsMenu);
}
}
invalidateOptionsMenu()
会非常明显。我更喜欢这个解决方案使用更少的工作量。 - Nico Dumdum调用invalidateOptionsMenu()而不是传递菜单对象。
requireActivity().invalidateOptionsMenu()
。 - lasec0203通过将菜单对象传递给您的Activity类,您可以实现这一点。
public class MainActivity extends Activity
{
...
...
private Menu _menu = null;
@Override
public boolean onCreateOptionsMenu(Menu menu)
{
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.activity_main, menu);
_menu = menu;
return true;
}
private Menu getMenu()
{
//use it like this
return _menu;
}
}
据我理解,您想要的是以下内容,这可能会对您有所帮助:
1. 参考选项菜单上的教程。
2. 每次用户按下菜单按钮时,您可以通过getTitle()
检查其标题。
3. 或者,如果您想要知道用户在未按下菜单按钮时选择的最后一个菜单项,则需要在用户按下时存储首选项。
有几个回调方法提供菜单作为参数。
你可能想在那里操作它。
例如:
onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo)
onCreateOptionsMenu(Menu menu)
onCreatePanelMenu(int featureId, Menu menu)
还有更多,请查看活动文档并查找所需的方法: http://developer.android.com/reference/android/app/Activity.html
现在Android有工具栏小部件,它是一个可以设置/获取菜单的控件。例如,在Activity中使用setSupportActionBar(Toolbar)来设置工具栏,从Fragment中使用onCreateOptionsMenu等方法进行一些变化。线程已重新启动!