如何在onContextItemSelected()中检索ID

时间:2012-10-25 19:53:08

标签: android contextmenu

我需要onContextItemSelected()中某个项目的ID。我使用以下代码:

@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
    if (v.getId()==R.id.listView1) {
        AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo)menuInfo;
        menu.setHeaderTitle("Optionen");
        menu.add(Menu.NONE, info.position, 0, "Artikel entfernen");
    }
}

@Override
public boolean onContextItemSelected(MenuItem item) {       
    final ListView lv = (ListView)findViewById(R.id.listView1);
    Toast.makeText(getApplicationContext(), lv.getItemAtPosition(item.getItemId()).toString(), Toast.LENGTH_LONG).show();
    return true;
}

无法使用info.positiononContextItemSelected读取item.getItemId var!应用程序崩溃了日志: String empty 。你能找到错误吗?谢谢!

更新 我将代码更改为:

@Override
public void onCreateContextMenu(ContextMenu menu, View v,
    ContextMenuInfo menuInfo) {
    if (v.getId()==R.id.listView1) {
    AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo)menuInfo;
    menu.setHeaderTitle("Optionen");
    menu.add(Menu.NONE, info.position, 0, "delete post");
  }
}

@Override
public boolean onContextItemSelected(MenuItem item) {

  final ListView lv = (ListView)findViewById(R.id.listView1);
  //lv.getItemAtPosition(0).toString()


  AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo)item.getMenuInfo();


  Toast.makeText(getApplicationContext(), info.position, Toast.LENGTH_LONG).show();
  //Toast.makeText(getApplicationContext(), lv.getItemAtPosition(item.getItemId()).toString(), Toast.LENGTH_LONG).show();


  return true;
}

但是这段代码也不起作用(NotFoundException)。我有一个带有项目的listview(R.id.listView1)。如果用户长时间点击某个项目,则会显示上下文菜单。有“删除帖子”选项。然后我需要帖子中的ID来删除它!

还有其他解决方案吗?

更新2 我解决了这个问题:

Toast.makeText(getApplicationContext(), lv.getItemAtPosition(info.position).toString(), Toast.LENGTH_LONG).show();

1 个答案:

答案 0 :(得分:2)

info.id将是与id中给定项目相关联的AdapterView值。

要在info中获取onContextItemSelected(),请使用:

AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo)item.getMenuInfo();

另外,请注意,上下文菜单变得越来越不受欢迎,支持带动作栏的动作模式(a.k.a。,上下文动作栏)。