为啥 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 执行相同的过程,但问题不存在。
【问题讨论】:
如果您同时设置了OnItemLongClickListener
和registerForContextMenu
,则必须在侦听器中返回false
以避免AdapterContextMenuInfo
为空。我实际上在侦听器中调用registerForContextMenu
,因为我正在禁用某些列表项的上下文菜单并且它工作正常。
谢谢@3k-!!我花了几个小时才找到这个解决方案。在侦听器中返回 false
就可以了!
【参考方案1】:
您希望从 getMenuInfo() 中得到什么?无论如何,我认为它不会由 LinearLayout 填充,我相信您最多可以获得生成菜单的 View(相同的 LinearLayout)。
【讨论】:
以上是关于为啥 registerForContextMenu 将 onCreateContextMenu 传递给 null ContextMenuInfo?的主要内容,如果未能解决你的问题,请参考以下文章
Fragment 中的上下文菜单使用来自不同 Fragment 的 ListView: registerForContextMenu(getListView())