RecyclerView DiffUtil.dispatchUpdateTo Completed Notification

В настоящее время я использую класс 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 выполнить этот код и надеяться, что обновления адаптера будут завершены к моменту его запуска. Не красиво или не идеально!

0 ответов

Другие вопросы по тегам