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不起作用