当我点击菜单时,上述方法返回的是第一个菜单的ID而不是我点击的菜单的ID。如果我检查菜单的Title Condensed,则是正确的。
(Newbe)
int id = item.getItemId(); //returns id of an incorrect menu
String Title = (String) item.getTitleCondensed(); //this returns the correct title.
欢迎提出任何想法。
当我点击菜单时,上述方法返回的是第一个菜单的ID而不是我点击的菜单的ID。如果我检查菜单的Title Condensed,则是正确的。
(Newbe)
int id = item.getItemId(); //returns id of an incorrect menu
String Title = (String) item.getTitleCondensed(); //this returns the correct title.
欢迎提出任何想法。
我曾经遇到过同样的问题。构建生成的文件没有被正确地更新。
如果我在XML中重新排列菜单项...进行构建并惊奇地发现,点击菜单会带来与预期不同的代码。
请清理并再试一次。
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;
}
}
<?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
,以便更容易地解决您的问题。
menu.xml
,onCreateOptionsMenu
和 onOptionsItemSelected
,这样就可以更容易地找出您的问题。 - Victor