0

サブメニュー付きのメニューがあります。親アイテムは「オプション」であり、その子は「呼び出し」、「ナビゲート」、および「編集」です。これがメニュークリックを処理する私のアクティビティコードです。問題は、最初のサブメニューが常にイベントによって選択されることです。このコードでは、「Call」(最初の子アイテム)をクリックすると、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>
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 に答える