Android子菜单,如何返回主菜单?

时间:2012-11-08 09:15:30

标签: android submenu

我使用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);

我使用以下代码管理选项点击:

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

2 个答案:

答案 0 :(得分: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);
}

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

答案 1 :(得分:0)

最后,它只通过添加:

起作用
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中的

希望它能帮助别人。