ActionMode.Callback 的实现

Edg*_*Dev 5 android kotlin android-actionmode android-recyclerview

我有一个 ActionMode 的实现来显示 RecyclerView 中多选项目的数量。

我想知道何时点击actionMode中的后退按钮以便相应地重置recyclerView,但是在实现ActionMode.Callback时,我注意到每当ActionMode更新时都会调用onDestroyActionMode actionMode?.setTitle($selectedItems.size),这使得无法重置recyclerView - 删除选定的项目,删除覆盖颜色并通知 recyclerview 数据集已更改。 多重选择

这是我的回调

inner class ActionModeCallback : ActionMode.Callback {
    override fun onActionItemClicked(mode: ActionMode?, item: MenuItem?): Boolean {
        when (item?.getItemId()) {
            R.id.action_delete -> {
                myAdapter?.deleteSelectedIds()
                actionMode?.setTitle("") //remove item count from action mode.
                actionMode?.finish()
                return true
            }
        }
        return false
    }

    override fun onCreateActionMode(mode: ActionMode?, menu: Menu?): Boolean {
        val inflater = mode?.getMenuInflater()
        inflater?.inflate(R.menu.action_mode_menu, menu)
        return true
    }

    override fun onPrepareActionMode(mode: ActionMode?, menu: Menu?): Boolean {
        menu?.findItem(R.id.action_delete)?.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS)
        return true
    }

    override fun onDestroyActionMode(mode: ActionMode?) {
        Log.d(TAG, "onDestroyActionMode Called")
        //myAdapter?.selectedIds?.clear()
        //myAdapter?.notifyDataSetChanged()
        actionMode = null
    }
}
Run Code Online (Sandbox Code Playgroud)

我如何知道何时点击了 ActionMode 后退按钮? 完整源代码在这里=> https://github.com/Edge-Developer/RecyclerViewMultiSelectExample

Edg*_*Dev 5

天啊。这是我的错,每次选择一个项目(通过 MainActivity 上的界面)时,我都会启动一个新的 ActionMode,而不是在启动一个新的之前检查它是否已经启动。

这是我的代码

actionMode = startActionMode(ActionModeCallback())
Run Code Online (Sandbox Code Playgroud)

这是更新后的代码

if (actionMode == null) actionMode = startActionMode(ActionModeCallback())
Run Code Online (Sandbox Code Playgroud)

现在, onDestroyActionMode 仅在 actionMode 关闭后调用一次!

你可以查看github repo了解它是如何实现的

在 recyclerView 上实现多重选择时遇到了这个问题。