-1

我一生都无法弄清楚为什么会这样。我已经查看了 ABS 示例代码(它适用于非列表视图),我已经在网上搜索并正确按照说明进行操作,但我仍然有一些奇怪的错误。

在我的 onCreate() 期间,我调用此代码:

lv.setOnItemLongClickListener(new OnItemLongClickListener() {
    @Override
    public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
        registerForContextMenu(view);
        openContextMenu(view);
        return true;
    }
});

长按该项目时,由于某种原因,它不断从:

  • (第 6 行)openContextMenu()
  • View.showContextMenu()
  • AbsListView.showContextMenuForChild()
  • 回到(第 6 行)openContextMenu()

我确实有一个点击监听器集,但它不应该影响任何东西,因为如果点击它会打开一个新活动。

为了完整起见,这里是上下文菜单的创建。

@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
    if (v.getId() == R.id.lvFines) {
        menu.add("One");
        menu.add("Two");
        menu.add("Three");
        menu.add("Four");
    }
}

我是否使用了来自 ActionBarSherlock 的错误“支持”功能?

4

1 回答 1

4

好吧,我现在觉得很傻,因为我在发布问题后这么快就修复了它。

问题是onItemLongClick()方法,不要将它用于上下文菜单。

相反,为上下文菜单注册 LISTVIEW。

这是来源。

对于 onCreate():

registerForContextMenu(lv);

并在长按期间访问所选项目:

@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
    if (v.getId() == R.id.lv) {
        ListView lv = (ListView) v;
        AdapterView.AdapterContextMenuInfo acmi = (AdapterContextMenuInfo) menuInfo;
        YourObject obj = (YourObject) lv.getItemAtPosition(acmi.position);

        menu.add("One");
        menu.add("Two");
        menu.add("Three");
        menu.add(obj.name);
    }
}

这就是所有的人!

于 2013-04-23T13:35:49.900 回答