0

次のような ContextMenu に xml を使用します。

<menu xmlns:android="http://schemas.android.com/apk/res/android"> 
  <item android:id="@+id/Ordermenu" android:title="Order">
    <menu android:id="@+id/OrderBySubMenu">
      <item android:id="@+id/OrderByASC" android:title="Order ASC"   /> 
      <item android:id="@+id/OrderByDESC" android:title="Order DESC"  />
      <item android:id="@+id/Cancel" android:title="Cancel"  />
    </menu>
   </item> 
 <item android:id="@+id/ActionAmenu" android:title="Action A"/>
</menu>

onCreateContextMenu で、次のコードを使用してメニューを表示します

MenuInflater inflater = getMenuInflater();
inflater.inflate(R.layout.my menu, menu);

次のコードでオプションのクリックを管理します:

public boolean onContextItemSelected(MenuItem item) {
  switch (item.getItemId()) {
  case R.id.Displaymenu:
     //do stuff
     return true;
  case R.id.OrderByASC:
     //do stuff
     return true;
  case R.id.OrderByDESC:
     //do stuff
     return true;
  default :
     return(super.onOptionsItemSelected(item));
}

コンテキスト メニューを開始すると、次の 2 つのオプションが表示されます。

  • 注文
  • アクションA

[注文] をクリックすると、サブメニューが表示されます。

  • オーダーASC
  • 注文内容説明
  • キャンセル

ここで、ユーザーがキャンセルをクリックした場合 (またはハードウェアの [戻る] ボタンをクリックした場合)、アクションが指定されていないため、メイン アクティビティに戻る super.onOptionsItemSelected(item) が呼び出されます。

このような場合、どうすればメインメニューに戻ることができますか? つまり、イニシャルを表示します。

  • 注文
  • アクションA
4

2 に答える 2

1

私はこれをずっと前に試しましたが、これを機能させるには onPrepareOptionsMenu もオーバーライドする必要があると思います。これは表示される前に呼び出され、ユーザーに表示する項目にフラグを設定する必要があります。

次のようなことを試してください:

@Override
public boolean onPrepareOptionsMenu(Menu menu) 
{
    // Clear the previous layout
    menu.clear();

    if(showMainMenu) 
    {
        // Add main menu items..
        menu.add(0, R.id.ordermenu, 0, "True");
    } 
    else 
    {
        // Add sub-menu items
        menu.add(0, R.id.ordermenuASC, 0, "True");
    }

    return super.onPrepareOptionsMenu(menu);
}

したがって、ユーザーがメイン メニュー項目をクリックすると、ブール値フラグが変更され、プロセスがやり直されます。

于 2012-11-08T09:25:30.313 に答える