2013-04-23 52 views
-1

我不能为了我的生活找出为什么会发生这种情况。 我已经查看了ABS示例代码(对非列表视图可以正常工作),我在网上搜索并正确执行了指示,但仍然有一些奇怪的错误。android:listview long click&context popup造成stackoverflowror(可能是由于actionbarsherlock?)

在我的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

嗯,我现在觉得很愚蠢,因为我在发布问题后尽快修复了它。

问题是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); 
    } 
} 

这是所有乡亲!