0

我有一个带有子菜单的菜单。父项是“选项”,其子项是“呼叫”、“导航”和“编辑”。这是我处理菜单点击的活动代码。问题是第一个子菜单总是被事件选中。使用此代码,如果我单击“调用”(第一个子项),onOptionsItemSelected() 方法将注册被选中的 R.id.record_edit 项。我不知道为什么会发生这种情况,因为“呼叫”菜单项的 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>
4

1 回答 1

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);
    }
}
于 2013-03-15T05:26:02.083 回答