【问题标题】:Android Submenu, how to go back to main menu?Android子菜单,如何返回主菜单?
【发布时间】:2012-11-09 17:21:59
【问题描述】:

我为我的 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));
}

启动上下文菜单会显示两个选项:

  • 订购
  • 动作A

点击订单显示子菜单:

  • 订购 ASC
  • 订购 DESC
  • 取消

现在,如果用户单击取消(或单击硬件后退按钮),则未指定任何操作,因此它调用 super.onOptionsItemSelected(item) 返回我的主要活动。

在这种情况下,我怎样才能设法返回主菜单?即显示首字母:

  • 订购
  • 动作A

【问题讨论】:

    标签: android submenu


    【解决方案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);
    }
    

    因此,当用户单击主菜单项时,将布尔标志更改为重做该过程。

    【讨论】:

    • 谢谢,这对我有帮助,即使这不是我最终要做的......我试图实现你的解决方案,我在问在哪里设置 ShowMainMenu 值,但我终于设法做我只想添加几行的是 oncontextmenuselected :请参阅我自己的答案。无论如何,您的解决方案可能更适合子菜单等......
    【解决方案2】:

    最后,它只能通过添加:

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

    in public boolean onContextItemSelected(MenuItem item)

    selected_view_id 由

    存储
    selected_view_id=v.getId();
    

    在 onCreateContextMenu 中

    希望它能帮助其他人。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多