从未调用过的自定义 ActionProvider 中的 onPrepareSubMenu

Gee*_*e.E 5 android menuitem shareactionprovider

在我问这个问题之前,让我提供一些额外的信息:

我有一个片段,它MenuItemonCreateOptionsMenu. 添加的 MenuItem 还ActionProvider添加了一个自定义项。

自定义ActionProvider不使用 ActionView 而是准备一个SubMenu具有某些可供选择的项目。出于这个原因,我设置ActionProvider如下:

  • nullonCreateActionView方法中返回
  • hasSubMenu() 返回 true
  • onPrepareSubMenu(SubMenu Menu)我首先清除当前菜单,然后添加需要的项目
  • onMenuItemClick在 ActionProvider 中正确处理了
  • 因为我使用的是 ActionBarSherlock,所以我的 ActionProvider 扩展com.actionbarsherlock.view.ActionProvider而不是android.support.v4.view.ActionProvider(不知道它是否应该有任何区别,但此时我不知道是什么)

这一切在 Android 版本高于 3.0 的设备上运行良好。我看到添加的MenuItem,它具有正确的SubMenu(来自边界ActionProvider)并且为每个菜单选项执行正确的操作。但是对于运行低于 3.0 的 Android 版本的设备(我只能在运行 2.3.6 的设备上进行测试),会发生一些奇怪的事情;因此有以下问题。

谷歌明确指出:

"onPerformDefaultAction()

当从操作溢出中选择菜单项时,系统会调用它,并且操作提供者应该为菜单项执行默认操作。但是,如果您的操作提供程序通过 onPrepareSubMenu() 回调提供子菜单,则即使将操作提供程序置于操作溢出中,也会显示子菜单。因此,当有子菜单时,永远不会调用 onPerformDefaultAction()。”

取自:http : //developer.android.com/guide/topics/ui/actionbar.html#CreatingActionProvider

从我的摘录来看,onPerformDefaultAction()永远不应该在我的自定义 ActionProvider 中调用它。然而,在运行 Android 2.3.6 版的设备上,onPerformDefaultAction()会调用 DOES,这也阻止了SubMenu显示。

我的问题是;为什么onPerformDefaultAction()调用的是get 而不是onPrepareSubMenu(SubMenu Menu)?我还需要运行 Android 2.3.6 的设备上的子菜单。


编辑:

我设法使用SubMenus.java来自 ActionbarSherlock 演示代码的相同技术解决了我的问题。这涉及向SubMenu中的菜单添加一个而不是自定义的 ActionProvider onCreateOptionsMenu(Menu menu),并附OnMenuItemClickListener加到那里的每个 MenuItem。

解决方法很好也很简单。尽管如此,这并没有回答我关于为什么自定义 ActionProvider 不起作用的问题。