【问题标题】:How to close an ActionMode menu programmatically on Honeycomb?如何在 Honeycomb 上以编程方式关闭 ActionMode 菜单?
【发布时间】:2012-06-22 15:08:38
【问题描述】:

在我的应用程序中有一个 ListFragment,其中列表中的每个项目都包含一个复选框。每当用户单击其中一个复选框时,应用程序就会启动一个 ActionMode 上下文菜单。 但我希望应用程序在单击另一个组件时关闭 ActionMode 菜单。 我试过Fragment#closeContextMenu() 没有成功。

有什么想法可以实现吗?

【问题讨论】:

    标签: android android-fragments android-3.0-honeycomb contextual-action-bar


    【解决方案1】:

    每当你创建/启动 ActionMode 时创建者

    mMode = startActionMode(....);
    

    要关闭它,请使用以下语法

    if (mMode != null) 
     {
         mMode.finish();
     }
    

    【讨论】:

    • 我觉得我太累了,我什至没有想到。谢谢 Vipul!
    • 难道没有更“本地化”的方法来解决这个问题吗?没有创建成员的东西?
    • 注意:让我感动的东西 - mMode 必须是活动的类字段(正如命名所暗示的那样),因为您不能声明它并在同一个回调中使用它。
    【解决方案2】:

    Kotlin 代码

    按下菜单项后使用ActionMode.Callback完成ActionMode

     private val actionModeCallbacks = object : ActionMode.Callback {
        override fun onCreateActionMode(mode: ActionMode, menu: Menu): Boolean {
            mode.menuInflater.inflate(R.menu.menu_action_mode, menu)
            return true
        }
    
        override fun onPrepareActionMode(mode: ActionMode, menu: Menu): Boolean {
            return false
        }
    
        override fun onActionItemClicked(mode: ActionMode, item: MenuItem): Boolean {
            when (item.itemId) {
                R.id.menu_item -> {
                    mode.finish() // after click of menu item close action mode
                    return true
                }
            }
            return false
        }
    
        override fun onDestroyActionMode(mode: ActionMode) {
    
    
        }
    }
    

    startSupportActionMode

    (activity as AppCompatActivity).startSupportActionMode(actionModeCallbacks)
    

    【讨论】:

      【解决方案3】:
      actionMode.finish();
      

      当从actionmode调用finish方法时......它会破坏action mode。

      @Override
      public void onDestroyActionMode(ActionMode mode) {
      
          //When action mode destroyed remove selected selections and set action mode to null
      
      
      }
      

      从回调事件中调用destroy方法

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-12-05
        • 1970-01-01
        • 1970-01-01
        • 2021-11-19
        • 2013-04-03
        相关资源
        最近更新 更多