Android 自定义ActionProvider中的onPrepareSubMenu从未调用
在我提问之前,请允许我提供一些其他信息: 我有一个片段,它在Android 自定义ActionProvider中的onPrepareSubMenu从未调用,android,menuitem,shareactionprovider,Android,Menuitem,Shareactionprovider,在我提问之前,请允许我提供一些其他信息: 我有一个片段,它在oncreateoptions菜单中添加了一个MenuItem。添加的菜单项还添加了自定义的ActionProvider 自定义的ActionProvider不使用ActionView,而是准备一个子菜单,其中包含一些可供选择的项目。因此,我将ActionProvider设置如下: 我在onCreateActionView方法中返回null hasSubMenu()返回true 在onPrepareSubMenu(子菜单)中,我首先清
oncreateoptions菜单中添加了一个MenuItem
。添加的菜单项还添加了自定义的ActionProvider
自定义的ActionProvider
不使用ActionView,而是准备一个子菜单
,其中包含一些可供选择的项目。因此,我将ActionProvider
设置如下:
- 我在
onCreateActionView
方法中返回null
hasSubMenu()
返回true
- 在
onPrepareSubMenu(子菜单)
中,我首先清除当前菜单,然后添加所需的项目
- 我正确处理ActionProvider中的
onMenuItemClick
- 因为我使用的是ActionBarSherlock,所以我的ActionProvider扩展了
com.ActionBarSherlock.view.ActionProvider
,而不是android.support.v4.view.ActionProvider
(不知道这是否会有什么不同,但现在我不知道是什么)
这一切在Android版本高于3.0的设备上运行良好。我看到添加的菜单项
,它有正确的子菜单
(来自绑定的操作提供程序
),并且每个菜单选项都有正确的操作。但是对于运行3.0以下Android版本的设备(我只能在运行2.3.6的设备上进行测试),奇怪的事情发生了;因此,提出以下问题
谷歌明确表示:
“onPerformDefaultAction()
当从操作溢出中选择菜单项时,系统将调用此函数,并且操作提供程序应为菜单项执行默认操作。
但是,如果操作提供程序通过onPrepareSubMenu()回调提供子菜单,则即使操作提供程序位于操作溢出中,子菜单也会出现。因此,如果存在子菜单,则永远不会调用onPerformDefaultAction()
摘自:
从摘录中,我认为在我的自定义ActionProvider中永远不应该调用onPerformDefaultAction()
。但是在运行Android 2.3.6版的设备上,会调用onPerformDefaultAction()
,这也会阻止子菜单的显示
我的问题是,;为什么调用onPerformDefaultAction()
而不是onPrepareSubMenu(子菜单)
?我需要在运行安卓2.3.6的设备上也有一个子菜单
编辑:
我使用ActionbarSherlock演示代码中的子菜单.java
中的相同技术解决了我的问题。这涉及到在onCreateOptions菜单(菜单菜单菜单)
中的菜单中添加子菜单,而不是自定义操作提供程序,并将OnMenuItemClickListener
附加到每个菜单项
解决方法很好,也很简单。不过,这并不能回答我的问题,即为什么自定义ActionProviders不起作用