В настоящее время я использую класс DiffUtil для расчета и отправки обновлений моего адаптера с помощью ListUpdateCallback
следующим образом:
inner class NotificationCallback(private val onInsert: () -> Unit) : ListUpdateCallback {
override fun onInserted(position: Int, count: Int) {
notifyItemRangeInserted(position, count)
Log.d("NotificationCallback", "onInserted position: $position count: $count")
onInsert()
}
override fun onChanged(position: Int, count: Int, payload: Any?) {
notifyItemRangeChanged(position, count)
Log.d("NotificationCallback", "onChanged position: $position count: $count")
}
override fun onMoved(fromPosition: Int, toPosition: Int) {
notifyItemMoved(fromPosition, toPosition)
Log.d("NotificationCallback", "onMoved from: $fromPosition to: $toPosition")
}
override fun onRemoved(position: Int, count: Int) {
notifyItemRangeRemoved(position, count)
Log.d("NotificationCallback", "onRemoved position: $position count: $count")
}
}
Как видно из этого кода, я обновляю адаптер с помощьюсоответствующие методы, но я хочу запускать некоторый код только тогда, когда что-то вставлено.Это работает, однако, потому что другие методы уведомления могут (и вызываются) вызываться после кода вставки, это вызывает некоторые проблемы с кодом, который я запускаю, когда что-то вставлено.В идеале мне нужно знать, когда все обновления были отправлены на адаптер, чтобы я мог затем запустить соответствующий код, если это необходимо.Есть ли такой способ или способ узнать это?
В настоящее время у меня есть решение использовать postDelayed
для выполнения этого кода и надеяться, что обновления адаптера будут завершены к моменту его запуска.Не красиво или не идеально!