(Newbe)
当我点击一个菜单时,上面的方法会从第一个菜单返回一个ID,而不是我点击的那个ID。如果我检查菜单的标题浓缩是正确的。
int id = item.getItemId(); //returns id of an incorrect menu
String Title = (String) item.getTitleCondensed(); //this returns the correct title.
欢迎任何想法。
答案 0 :(得分:7)
我遇到了同样的问题。构建中生成的文件未正确更新。
如果我重新排序xml中的菜单项...构建和惊喜,我也有同样的效果。单击菜单会显示除预期之外的其他代码。
干净并再试一次
答案 1 :(得分:1)
您应该在onCreateOptionsMenu和onCreateContextMenu中为每个菜单项设置唯一ID。
例如:
public static final int CONTEXT_MENU_DELETE = Menu.FIRST;
public static final int CONTEXT_MENU_EDIT = CONTEXT_MENU_DELETE + 1;
@Override
public void onCreateContextMenu(ContextMenu menu, View v,
ContextMenuInfo menuInfo) {
menu.add(0, CONTEXT_MENU_DELETE, 1, R.string.delete);
menu.add(0, CONTEXT_MENU_EDIT, 2, R.string.edit);
}
// And then
@Override
public boolean onContextItemSelected(MenuItem item) {
switch(item.getItemId()) {
case CONTEXT_MENU_DELETE:
// Delete item
break;
case CONTEXT_MENU_EDIT:
// Edit item
break;
}
}
onCreateOptionsMenu和onOptionsItemSelected也是如此。每个菜单选项都应该有一个唯一的常量。
添加了:
你没有看到this tutorial吗?
这个想法是一样的。您应该在menu.xml
中设置不同的ID:
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/new_game"
android:icon="@drawable/ic_new_game"
android:title="@string/new_game" />
<item android:id="@+id/help"
android:icon="@drawable/ic_help"
android:title="@string/help" />
</menu>
然后在onOptionsItemSelected
中使用这些ID:
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle item selection
switch (item.getItemId()) {
case R.id.new_game:
newGame();
return true;
case R.id.help:
showHelp();
return true;
default:
return super.onOptionsItemSelected(item);
}
}
从官方Android菜单教程中查看这些代码块,并与您自己的代码进行比较。您还可以发布menu.xml
,onCreateOptionsMenu
和onOptionsItemSelected
,以便轻松找出问题所在。