Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/197.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 AdapterContextMenuInfo始终为空_Android - Fatal编程技术网

Android AdapterContextMenuInfo始终为空

Android AdapterContextMenuInfo始终为空,android,Android,我试着按照android开发文档中的书来做: // this didn't create a menu, i don't know why //registerForContextMenu(getListView()); setListAdapter(new ArrayAdapter<Note>(this, R.layout.selectset_listitem) { @Override protected View getView(...) {

我试着按照android开发文档中的书来做:

// this didn't create a menu, i don't know why
//registerForContextMenu(getListView());

setListAdapter(new ArrayAdapter<Note>(this, R.layout.selectset_listitem) {
    @Override

    protected View getView(...) {
        ... custom layout ...

        // this creates a menu, but...
        registerForContextMenu(convertView);

        return convertView;
    }
}
但这部分总是给我一个空信息:

public boolean onContextItemSelected(MenuItem item) {
    AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo();
    ...
}

唯一真正独特的是,我有一个列表项的自定义布局(即两个文本字段和一个图像)。是否需要执行某些操作才能获取为其构建上下文菜单的列表项的索引?

您需要在
列表视图上的活动中调用
registerForContextMenu()
,而不是在适配器中的视图项上调用。

getMenuInfo()
将在列表适配器上运行,不在观点上

但是,您可以使用视图的标记传递附加数据


您可以使用id

您说onCreateContextMenu“几乎”完全相同,有什么区别?你能发布该方法吗?该方法与文档中的方法完全相同。为什么要注释掉registerForContextMenu()?它不“创建”菜单,它只注册您的列表视图以监听长时间触摸事件,并调用onCreateContextMenu。如果你不注册onCreateContextMenu,那么很可能onCreateContextMenu将不起作用。我将第一行注释掉,因为它似乎不起作用。列表视图中的长点击没有创建上下文菜单。未注释的调用实际上会生成一个菜单。现在,当您调试并进入onContextItemSelected时会发生什么?您是否也在使用自定义适配器?如果是这样的话,发布代码。recyclerview似乎不是这样工作的。你知道有什么解决办法吗?@eipipuz
public boolean onContextItemSelected(MenuItem item) {
    AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo();
    ...
}
getView: vi.setTag(position) activity.registerForContextMenu(vi);

declare in Activity private int id;

onCreateContextMenu: id = (int) v.getTag();

onContextItemSelected: