При проверке условия проверяется первое присвоенное значение переменной. А мне надо что бы проверялось повторно присвоенное значение
При завершение работы ActionMode
проверяется конструкция else if
. ActionModeController(tracker).isActionMode
проверяет значение этой переменной в классе, но проверяет первое присвоенное а при срабатывание метода onDestroyActionMode
переменной присваивается true
. Он и должен проверяться. Вследствие этого средний блок не срабатывает из-за неверного условия. Как исправить?
MainActivity.kt
tracker.addObserver(object : SelectionTracker.SelectionObserver<Model>() {
override fun onSelectionChanged() {
super.onSelectionChanged()
if (tracker.hasSelection() && actionMode == null && !ActionModeController(tracker).isActionMode) {
actionMode = startSupportActionMode(ActionModeController(tracker))
setSelectedTitle(tracker.selection.size())
Log.d("tracker", "Начало работы ActionMode")
} else if (ActionModeController(tracker).isActionMode && actionMode != null) {
setSelectedTitle(tracker.selection.size())
actionMode = null
Log.d("tracker", "Трекер закончил работу")
} else {
setSelectedTitle(tracker.selection.size())
}
}
})
ActionModeController.kt
class ActionModeController(private val tracker: SelectionTracker<Model>?): ActionMode.Callback {
var isActionMode: Boolean = false
override fun onCreateActionMode(mode: ActionMode?, menu: Menu?): Boolean {
mode?.menuInflater?.inflate(R.menu.action_mode_menu, menu)
return true
}
override fun onPrepareActionMode(mode: ActionMode?, menu: Menu?): Boolean {
return true
}
override fun onActionItemClicked(mode: ActionMode?, item: MenuItem?): Boolean {
when(item?.itemId) {
R.id.delete -> {
}
}
return true
}
override fun onDestroyActionMode(mode: ActionMode?) {
isActionMode = true
tracker?.clearSelection()
Log.d("ActionMode", "Трекер очистил список выделенных элементов и завершил работу")
}
}
Источник: Stack Overflow на русском