android:listview长按&导致stackoverflower的上下文弹出窗口(可能是由于actionbarsherlock?)

时间:2013-04-23 13:11:42

标签: android listview actionbarsherlock onlongclicklistener

我不能为我的生活弄清楚为什么会这样。 我查看了ABS示例代码(适用于非listviews),我已经在线搜索并正确地按照说明操作,但我仍然有一些奇怪的错误。

在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中错误的“支持”功能?

1 个答案:

答案 0 :(得分:4)

嗯,我觉得很傻,因为我在发布问题后很快就修好了。

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

相反,请在上下文菜单中注册LISTVIEW。

这是来源。

for 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);
    }
}

这就是所有人!