RecyclerView DiffUtil.dispatchUpdateTo Completed Notification - PullRequest
0 голосов
/ 22 мая 2019

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

...