(Newbe)
当我单击菜单时,上面的方法返回第一个菜单中的ID,而不是我点击的ID.如果我检查菜单的标题浓缩,那是正确的.
int id = item.getItemId(); //returns id of an incorrect menu
String Title = (String) item.getTitleCondensed(); //this returns the correct title.
Run Code Online (Sandbox Code Playgroud)
欢迎任何想法.
您应该在 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;
}
}
Run Code Online (Sandbox Code Playgroud)
onCreateOptionsMenu 和 onOptionsItemSelected 也是如此。每个菜单选项都应该有一个唯一的常量。
添加:
你没看过这个教程吗?这个想法是一样的。您应该在以下位置设置不同的 id menu.xml:
<?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>
Run Code Online (Sandbox Code Playgroud)
然后在以下位置使用这些 id onOptionsItemSelected:
@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);
}
}
Run Code Online (Sandbox Code Playgroud)
查看官方 Android 菜单教程中的这些代码块,并与您自己的代码进行比较。您还可以发布您的menu.xml,onCreateOptionsMenu这样onOptionsItemSelected就很容易找出您的问题。
| 归档时间: |
|
| 查看次数: |
2617 次 |
| 最近记录: |