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

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

  • 命令
  • 行动A

单击订单显示子菜单:

  • 订购 ASC
  • 订购 DESC
  • 取消

现在,如果用户单击取消(或单击硬件后退按钮),则未指定任何操作,因此它调用 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 回答
0

最后,它只能通过添加:

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

在公共布尔 onContextItemSelected(MenuItem item)

selected_view_id 由

selected_view_id=v.getId();

在 onCreateContextMenu

希望它会帮助别人。

于 2012-11-09T09:21:59.723 回答