2012-10-25 28 views
2

我需要onContextItemSelected()中某个项目的ID。我使用下面的代码:如何检索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.position VAR无法从onContextItemSelecteditem.getItemId阅读!该应用程序与日志崩溃:字符串空。你能找到一个错误吗?谢谢!

UPDATE 我改变了代码:

@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(); 

回答

2

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

onContextItemSelected()获得在info,使用方法:

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

另外,还要注意上下文菜单变得更受欢迎,有利于操作模式(也叫做上下文的动作条)与动作吧。

+0

我更新了代码。但它不起作用。此外,我添加了一些解释。谢谢。 “ – user1756209

+0

@ user1756209:”但是这段代码也不起作用(NotFoundException)“ - 您正在尝试使用带有随机ID的字符串资源显示”Toast“。这是行不通的。如果你的目标是显示一个'Toast',它的消息恰好是一个'int',你需要将这个'int'转换为'String',这样Android不会将你的'int'当作字符串资源ID。此外,您询问“来自帖子的ID”,但您正在检查“info.position”,而不是“info.id”,正如我在答案中指出的那样。 – CommonsWare

+0

非常感谢!我解决了这个问题。 – user1756209