I have an Implementation of ActionMode to display the number of multi selected items in a RecyclerView.
I would like to know when the back button in the actionMode is tapped so as to correspondingly reset the recyclerView but while implementing the ActionMode.Callback, i noticed that onDestroyActionMode is called whenever ActionMode is updated thus actionMode?.setTitle($selectedItems.size)
, which makes it impossible reset the recyclerView - remove selected items, remove overlay color and notify the recyclerview of data set changed.
Here's my Callback
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
}
}
How Can i know when the ActionMode back button is tapped? Full source code Here =>https://github.com/Edge-Developer/RecyclerViewMultiSelectExample
Holy Gosh. It was my fault, i was starting a New ActionMode each time an item is selected (through an interface on MainActivity) instead of checking if it has already been started before starting a new One.
Here was my code
actionMode = startActionMode(ActionModeCallback())
Here is the updated code
if (actionMode == null) actionMode = startActionMode(ActionModeCallback())
now, the onDestroyActionMode is called only once, after the actionMode is dismissed!
You can check the github repo on how's it was implemented
This problem was faced while implementing multiselection on a recyclerView.