如何以编程方式创建Menu实例?即在onCreateOptionsMenu之外为菜单充气

问题描述 投票:34回答:5

我想给菜单对象outside onCreateOptionsMenu方法充气(这意味着在用户不按按钮时创建/显示菜单),因此我需要创建一个菜单实例以将其传递给充气方法。

这是我要实现的目标的一个示例:

Menu menu = // How to create an instance !? 
new MenuInflater(context).inflate(R.menu.my_menu, menu)

Menu是一个接口,所以我需要知道哪个类正在实现它。我确实浏览了Android代码以获取有关如何创建Menu对象的任何提示,但仍然找不到我想要的内容。

编辑1

我的目标是从自定义视图中触发一个onOptionsItemSelected(MenuItem item)事件,该事件将由该活动处理,因此我需要一个具有特定itemId和标题的MenuItem对象,以将其与事件一起传递。

如果我可以成功创建一个Menu对象,将很容易获得其子MenuItems。

编辑2

不是试图显示一个菜单,我想要的是用元素[[在菜单XML中定义的]] 填充ListView,这些元素具有标题,图标和itemId,并且每当单击ListViewItem,我想触发onOptionsItemSelected(MenuItem item)事件在我的活动中处理。我知道我可以解析菜单XML来提取项目信息,但是如果不创建

standard

MenuItem对象以将其作为参数传递,就无法启动onOptionsItemSelected(MenuItem item)任何帮助将不胜感激。谢谢!

我想在onCreateOptionsMenu方法之外膨胀菜单对象(这意味着在用户不按按钮时创建/显示菜单,所以我需要创建一个菜单实例以将其传递给...

android android-layout menu menuitem
5个回答
41
投票
这里是获取Menu实例的技巧:

28
投票
[我发现了两种解决方案,以编程方式创建Menu实例并对其进行膨胀:

2
投票
您无需对充气机进行任何操作即可添加自己的菜单。只需覆盖com.actionbarsherlock.view.MenuItem并开始在

menu


0
投票
您可以提取Activity中正在使用的PhoneWindow中存储的MenuBuilder实例(实现Menu接口)。我有一个有效的解决方案,它使用Java反射。

0
投票
我不确定为什么这还不是答案,而且我知道这是一个老问题,但对于将来的读者来说。。
© www.soinside.com 2019 - 2024. All rights reserved.