Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/202.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 无法访问菜单项值-包装在V7 MenuItemWrapperJB中_Android_Android Listview_Android Actionmode - Fatal编程技术网

Android 无法访问菜单项值-包装在V7 MenuItemWrapperJB中

Android 无法访问菜单项值-包装在V7 MenuItemWrapperJB中,android,android-listview,android-actionmode,Android,Android Listview,Android Actionmode,所以我在谷歌上搜索了几个星期,我不明白为什么我的菜单项被包装在一个包装器对象中,这意味着我无法通过menuItem.getItemId方法访问诸如item id之类的值。真正让我困惑的是,我以前使用的是浮动上下文菜单,它工作得很好 这是我用来访问项目id的代码 @Override public boolean onActionItemClicked(ActionMode mode, MenuItem item) { switch (item.getItemId())

所以我在谷歌上搜索了几个星期,我不明白为什么我的菜单项被包装在一个包装器对象中,这意味着我无法通过menuItem.getItemId方法访问诸如item id之类的值。真正让我困惑的是,我以前使用的是浮动上下文菜单,它工作得很好

这是我用来访问项目id的代码

   @Override
    public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
        switch (item.getItemId()) {
            case R.id.submit: ...
它给我的对象的确切类型是:android.support.v7.view.menu.MenuItemWrapperJB

如果菜单项但调用getMenuId方法返回类似2131558592的数字,则所有后续崩溃都与我使用id查询SQLite DB有关

编辑-我的问题是为什么这个包装器对象在这里,以及如何从中获取我想要访问的对象,即项目

编辑2-好吧,让我困惑的是,当我使用浮动上下文菜单时,包装器不在那里。真正的问题是,我无法使用item.getMenuInfo通过包装器在列表视图中获取所选项目的id,而我以前可以(通过浮动上下文菜单)获取该id


提前感谢您的帮助。

在AppCompat库中转换视图的正确方法:

例如,强制转换搜索视图

MenuItem menuItem = menu.findItem(R.id.action_search);
SearchView searchView = (SearchView) MenuItemCompat.getActionView(menuItem);
所以你需要投你提交的意见。希望能有帮助

我无法通过menuItem.getItemId方法访问项id等值

当然可以。否则,您的代码将无法编译

它给我的对象的确切类型是:android.support.v7.view.menu.MenuItemWrapperJB

这是因为您使用的是
appcompat-v7
,尽管它似乎与您的问题无关

所有后续的崩溃都与我使用id查询SQLite数据库有关,如果菜单项

如果您直接用Java代码创建菜单项,那么您所描述的并不是完全疯狂的。但是,如果通过菜单资源定义菜单项,则会生成
R.id
值。随着您更改应用程序中的资源组合,这些值将随着版本的不同而变化。持久化这些值(例如在数据库中)将无法可靠地工作

如何从包装器中取出所需的对象

你没有
MenuItem
是一个接口;您可以在接口上调用方法,而不管其底层实现如何。从技术上讲,您一开始并不知道它是一个包装器,尽管类名确实暗示了这一点

首先,它为什么在那里

如果您对菜单资源进行了扩展,则
MenuInflater
appcompat-v7
版本可能会取代它自己的
MenuItem
实现,作为后端口操作栏支持的一部分


如果您在Java代码中创建了
MenuItem
,通过调用
add()?2131558592是
R.id.submit
的prolly值。好吧,也许那部分不相关,但我如何才能从包装器中取出我需要的对象,为什么它首先在那里,也许我应该更清楚我的问题包装,那又怎样?你为什么要为这个(实现)而烦恼?MenuItem是一个接口…好的,我开始看到这个问题了。我似乎犯了可怕的逻辑错误。谢谢你这么清楚!因此,我不确定是否会通知您我的许多编辑,但您是提出此问题的人。因此,我无法使用item.getMenuInfo方法访问列表视图中所选项目的ID,因为它返回null。使用support v7 business时是否有其他方法访问ID?@Jack.Ramsden:“我无法使用item.getMenuInfo方法访问列表视图中所选项目的ID,因为它返回null”--天哪,我已经多年没有看到使用
getMenuInfo()
。我不知道它通常与动作模式一起工作,更不用说在
onActionItemClicked()
中特别工作了,如果您试图调用它的话。哦,我明白了,我只是使用了错误的方法。谢谢你的帮助。