ActionMode.Callback 的实施
Implementation of ActionMode.Callback
我有一个 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
}
}
我如何知道何时点击 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 时遇到了这个问题。
我有一个 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
}
}
我如何知道何时点击 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 时遇到了这个问题。