2012-12-14 160 views
0

我有一个ListView与一些元素。我想检索运行上下文菜单的元素的id(通过长按)。但下面的代码:ListView元素上下文菜单

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_adapter); 

    /*non relevant code was omitted*/ 
    registerForContextMenu(this.getListView()); 

} 

    @Override 
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo info){ 

    Log.i("view", String.valueOf(v.findFocus().getId())); 

    super.onCreateContextMenu(menu, v, info); 
    getMenuInflater().inflate(R.menu.activity_adapter_context_menu, menu); 
} 

返回总是相同的id,即ListView视图的id,而不是ListView元素ID。我尝试了一些其他选项,但没有找到解决方案。如何整理出来?

+0

我认为你需要实现onListItemClick因为列表视图与立场工作时间不IDS –

+0

尝试'registerForContextMenu()'每一个元素?看来你只注册了listview本身,而不是孩子,所以这就是回应。 – Geobits

+0

@Geobits不幸的是,它不工作。即使我尝试为每个孩子注册,但是在注册或不注册父级ListView的情况下,它只会在前一种情况下看到父级,或者在后一种情况下看不到任何情况。 – vlattson

回答

0

,如果你想获取列表项的ID,然后使用

lv.setOnItemLongClickListener(new OnItemLongClickListener() { 

      @Override 
      public boolean onItemLongClick(AdapterView<?> arg0, View arg1, 
        int arg2, long arg3) { 
       // TODO Auto-generated method stub 
       return false; 
      } 
     }); 
+0

好吧,它运作良好。谢谢! – vlattson

+0

如果我的回答对你有用,给我+1答案我的答案。 :)永远欢迎我的消防 –

0

set onItemClickListener for listView。在压倒一切的方法,获得视图编号

@Override 
public void onItemClick(AdapterView<?> adapterView, View view, int position, long id) { 

    String id = view.getId().toString(); 

    //open context menu now 
    view.showContextMenu(); 
} 

注意:注册上下文菜单只有一次。

regsiterForContextMenu(listView); 
+0

应该使用'onItemLongClickListener'来代替。 – Geobits

+0

通常,上下文菜单可以长时间点击。您可以通过为listView添加onItemLongClickListener来模拟相同的行为。那么,这一切都取决于你想如何实现! – Renjith

+0

@Renjith它只有当你第一次点击该项目,然后单击并打开上下文菜单才有效。 此外,我不想混合这两个操作:单击并长按一个项目。例如,该项目可以假设在点击时运行子活动并运行上下文菜单(即改变标签)。 – vlattson