【问题标题】:How can I create multiple context menus?如何创建多个上下文菜单?
【发布时间】:2011-04-08 03:53:49
【问题描述】:

我有 1 个活动,但希望为不同的 UI 组件提供多个上下文菜单。

例如,我有一个 ListView 会响应:

@Override  
    public void onCreateContextMenu(ContextMenu menu, View v,ContextMenuInfo menuInfo) {  

        super.onCreateContextMenu(menu, v, menuInfo);  
        menu.setHeaderTitle("Selection Options");  
        menu.add(0, v.getId(), 0, "Remove");  
    }  

如何为我拥有的 ImageView 的 onClick 事件创建另一个上下文菜单?

【问题讨论】:

    标签: android listview menu contextmenu imageview


    【解决方案1】:

    其实这个方法就是动态改变选项菜单。要创建多个上下文菜单,您必须在方法 onCreateContextMenu 中定义它们。如您所见,此方法接收一个 View 作为参数,即您单击以使菜单出现的 View。所以你保留你的ListView 的方法,并添加一些条件来区分你的Views。然后你使用这些条件来创建想要的Context Menu

    注意:上下文菜单不支持图标,因此如果您想要图标、图像或类似的东西,您将不得不使用您动态更改的选项菜单,或者创建一个带有自定义视图、意图和一切。

    【讨论】:

    • 如何判断 v 是 ListView 还是 v 是 ImageView?
    • 在Android中,你可以给视图添加标签,所以你只需要在视图上使用getTag。如果你知道的话,你也可以使用 View 的 id。
    • 祝福你 Sephy! “如您所见,此方法接收一个视图作为参数,即您单击以使菜单出现的视图。”这条线救了我!
    【解决方案2】:

    您可以使用tags

    在注册到相关上下文菜单之前,请在您的rootView 上设置标签:

    private static final Integer CONTEXT_MENU_YOUR_ACTION = 1; //indicator of the current context menu type
    
    // register for your context menu
    rootView.setTag(R.id.TAG_CONTEXT_MENU_ID, CONTEXT_MENU_YOUR_ACTION);
    registerForContextMenu(rootView);
    rootView.showContextMenu();
    unregisterForContextMenu(rootView);
    

    然后在onCreateContextMenu 中,您可以检查rootView 上的当前标签:

    Integer contextMenuId = (Integer) rootView.getTag(R.id.TAG_CONTEXT_MENU_ID);
    
    if (CONTEXT_MENU_YOUR_ACTION.equals(contextMenuId)) {
        //custom your context menu
    }
    

    同样的检查与onContextItemSelected 方法相关。

    【讨论】:

      【解决方案3】:
      @Override
      public boolean onPrepareOptionsMenu(Menu menu) 
      {
          // TODO Auto-generated method stub
          return super.onPrepareOptionsMenu(menu);
      }
      

      您可以在此方法中检查您的条件。这将在菜单对用户可见之前被触发。

      【讨论】:

      • 我要检查什么条件?
      • 如果用户点击了图像视图,则保留标志或其他内容,如果是,则显示您的更新菜单,否则显示正常菜单
      • OP 询问了上下文菜单——您的方法适用于选项菜单。
      猜你喜欢
      • 2011-09-30
      • 2014-07-27
      • 1970-01-01
      • 1970-01-01
      • 2014-12-15
      • 2019-05-01
      • 1970-01-01
      • 2022-01-03
      • 2011-06-21
      相关资源
      最近更新 更多