android - 子菜单单击未选择正确的项目

时间:2013-03-15 04:49:40

标签: android android-actionbar

我有一个带子菜单的菜单。父项为“选项”,其子项为“调用”,“导航”和“编辑”。这是我的活动代码,用于处理菜单点击。问题是第一个子菜单总是被事件选中。使用此代码,如果我单击“调用”(第一个子项),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>

1 个答案:

答案 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);
    }
}