我有一个带子菜单的菜单。父项为“选项”,其子项为“调用”,“导航”和“编辑”。这是我的活动代码,用于处理菜单点击。问题是第一个子菜单总是被事件选中。使用此代码,如果我单击“调用”(第一个子项),onOptionsItemSelected()方法将注册所选的R.id.record_edit项。我不知道为什么会发生这种情况,因为“Call”菜单项的id为“record_call”。我已经尝试在xml中切换子菜单项,但第一个子菜单项是唯一注册的项,它总是注册为R.id.record_edit。不确定我的代码有什么问题。
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.record_edit:
Intent intent = new Intent(this, EditRecordActivity.class);
myApp.setRecord(record);
Bundle b = new Bundle();
b.putBoolean("new", false);
b.putString("pageTitle", pageTitle);
b.putString("meta_universalid", meta_universalid);
intent.putExtras(b);
startActivity(intent);
return true;
default:
return super.onOptionsItemSelected(item);
}
}
xml菜单
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:id="@+id/record_options"
android:showAsAction="ifRoom|withText"
android:title="..."
android:titleCondensed="Options"
android:enabled="true">
<menu>
<item
android:id="@+id/record_call"
android:showAsAction="ifRoom|withText"
android:title="@string/record_call"/>
<item
android:id="@+id/record_navigate"
android:showAsAction="ifRoom|withText"
android:title="@string/record_navigate"/>
<item
android:id="@+id/record_edit"
android:showAsAction="ifRoom|withText"
android:title="@string/record_edit"/>
</menu>
</item>
</menu>
答案 0 :(得分:0)
只需检查您的菜单即可。它对我很好。检查您的整体格式是否与以下代码一样
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.record_call:
Toast.makeText(this, "call", 1000).show();
return true;
case R.id.record_edit:
Toast.makeText(this, "edit", 1000).show();
return true;
case R.id.record_navigate:
Toast.makeText(this, "navigate", 1000).show();
return true;
default:
return super.onOptionsItemSelected(item);
}
}