Gee*_*e.E 5 android menuitem shareactionprovider
在我问这个问题之前,让我提供一些额外的信息:
我有一个片段,它MenuItem
在onCreateOptionsMenu
. 添加的 MenuItem 还ActionProvider
添加了一个自定义项。
自定义ActionProvider
不使用 ActionView 而是准备一个SubMenu
具有某些可供选择的项目。出于这个原因,我设置ActionProvider
如下:
null
在onCreateActionView
方法中返回hasSubMenu()
返回 true
onPrepareSubMenu(SubMenu Menu)
我首先清除当前菜单,然后添加需要的项目onMenuItemClick
在 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 不起作用的问题。
归档时间: |
|
查看次数: |
531 次 |
最近记录: |