android - ActionMode.Callback 的实现

标签 android android-recyclerview kotlin android-actionmode

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

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

这是我的回调

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

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

最佳答案

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

这是我的代码

actionMode = startActionMode(ActionModeCallback())

这是更新后的代码

if (actionMode == null) actionMode = startActionMode(ActionModeCallback())

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

可以查看the github repo关于它是如何实现的

implementing multiselection on a recyclerView 时遇到了这个问题.

关于android - ActionMode.Callback 的实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49072285/

相关文章:

android - 在服务与其 Activity 之间共享数据

android - 有什么方法可以告诉 View 它正在被 RecyclerView 回收吗?

java - Recyclerview初始位置

android - 创 build 置 Activity 时出现 boolean 参数问题

android - 如何在android中保存listview并在需要时将其取回?

java - 在 redir 之后只接收少量的 UDP 数据包。 (安卓模拟器)

android - 折叠工具栏 - 禁用触摸滚动

android - Dagger2 - DoubleCheck 中的重复实例

Android:使用哪个后台服务?

java - 显示 Android 上的所有广播事件