AdapterContextMenuInfo始终为null

时间:2011-09-03 05:07:26

标签: android

我尝试用android dev docs这本书来做这个:

// 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;
    }
}

onCreateContextMenuonContextItemSelected几乎与http://developer.android.com/guide/topics/ui/menus.html#context-menu完全一样。

这是它在文档(和我的代码)中的外观:

@Override
public void onCreateContextMenu(ContextMenu menu, View v,
                                ContextMenuInfo menuInfo) {
  super.onCreateContextMenu(menu, v, menuInfo);
  MenuInflater inflater = getMenuInflater();
  inflater.inflate(R.menu.context_menu, menu);
}

但是这部分总是给我一个空信息:

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

唯一真正独特的是我有一个列表项的自定义布局(即几个文本字段和一个图像)。我是否需要做一些事情才能获得为上下文菜单构建的列表项的索引?

2 个答案:

答案 0 :(得分:5)

您需要在registerForContextMenu()上的活动中调用ListView,而不是调整适配器中的查看项。

答案 1 :(得分:4)

getMenuInfo()适用于 ListAdapter ,而不适用于观看次数。

但是,您可以使用视图标记传递其他数据。

in

getView: vi.setTag(position) activity.registerForContextMenu(vi);

declare in Activity private int id;

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

onContextItemSelected:

你可以使用id