Подменю Android, как вернуться в главное меню?

Я использую xml для своего ContextMenu, например:

<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);

Я управляю опцией click со следующим кодом:

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

При запуске контекстного меню отображаются две опции:

  • порядок
  • Действие А

Нажав на «Заказать», вы увидите подменю:

  • Заказать АСЦ
  • Заказать DESC
  • Отмена

Теперь, если пользователь нажимает кнопку «Отмена» (или нажимает кнопку «Назад»), действие не указывается, поэтому он вызывает super.onOptionsItemSelected(item), который возвращается к моей основной деятельности.

Как в таком случае вернуться в главное меню? то есть отображать начальный :

  • порядок
  • Действие А

person Got    schedule 08.11.2012    source источник


Ответы (2)


Я пробовал это давно, но я думаю, вам также придется переопределить 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);
}

Поэтому, когда пользователь щелкает элемент главного меню, измените логический флаг и повторите процесс.

person Lucas Arrefelt    schedule 08.11.2012
comment
Спасибо, это помогло мне, даже если это не то, что я делаю в конце концов... Я пытался реализовать ваше решение и спрашивал, где установить значение ShowMainMenu, но, наконец, мне удалось сделать то, что я хочу, только добавив несколько строка - это oncontextmenuselected: см. мой собственный ответ. В любом случае, ваше решение, возможно, более адаптировано для подменю и т.д. - person Got; 09.11.2012

Наконец, это сработало только путем добавления:

case R.id.Cancel:
   openContextMenu(findViewById(selected_view_id));
   return true;

в публичном логическом onContextItemSelected (элемент MenuItem)

selected_view_id хранится в

selected_view_id=v.getId();

в onCreateContextMenu

Надеюсь, это поможет другим.

person Got    schedule 09.11.2012