为啥 registerForContextMenu 将 onCreateContextMenu 传递给 null ContextMenuInfo?

Posted

技术标签:

【中文标题】为啥 registerForContextMenu 将 onCreateContextMenu 传递给 null ContextMenuInfo?【英文标题】:Why is registerForContextMenu passing onCreateContextMenu a null ContextMenuInfo?为什么 registerForContextMenu 将 onCreateContextMenu 传递给 null ContextMenuInfo? 【发布时间】:2011-10-14 09:58:21 【问题描述】:

在 onCreate 中,我将线性布局视图附加到变量 activeView。然后我打电话给registerForContextMenu(activeView)。看起来一切正常,上下文菜单被创建,项目是可点击的,但是,在onContextItemSelected,我调用AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo(),我得到一个空指针异常。我一直追踪 null menuInfo 变量,发现registerForContextMeu(activeView) 从一开始就向 OnCreateContextMenu 传递了一个 null ContextMenuInfo。为什么会这样?我对不同的视图、listView、linearlayout 执行相同的过程,但问题不存在。

【问题讨论】:

如果您同时设置了OnItemLongClickListenerregisterForContextMenu,则必须在侦听器中返回false 以避免AdapterContextMenuInfo 为空。我实际上在侦听器中调用registerForContextMenu,因为我正在禁用某些列表项的上下文菜单并且它工作正常。 谢谢@3k-!!我花了几个小时才找到这个解决方案。在侦听器中返回 false 就可以了! 【参考方案1】:

您希望从 getMenuInfo() 中得到什么?无论如何,我认为它不会由 LinearLayout 填充,我相信您最多可以获得生成菜单的 View(相同的 LinearLayout)。

【讨论】:

以上是关于为啥 registerForContextMenu 将 onCreateContextMenu 传递给 null ContextMenuInfo?的主要内容,如果未能解决你的问题,请参考以下文章

Fragment 中的上下文菜单使用来自不同 Fragment 的 ListView: registerForContextMenu(getListView())

ConxtMenu高级用法

ContextMenu的使用具体解释

ContextMenu的使用具体解释

Android 上下文菜单(Context Menu)

Android开发长按菜单上下文菜单