onBindViewHolder () вызывается без полезной нагрузки после notifyItemChanged () с полезной нагрузкой - PullRequest
0 голосов
/ 18 июня 2019

У меня есть notifyDataSetChanged(), за которым следует notifyItemChanged(0, Unit) с полезной нагрузкой, вызываемой для того же адаптера, содержащего, скажем, 3 элемента.

Каждый из вызовов осуществляется внутри view.post().

Я ожидаю, что onBindViewHolder() будет вызываться 4 раза: 3 раза для notifyDataSetChanged() и один раз для notifyItemChanged()

На самом деле он вызывается 3 раза, все с пустой полезной нагрузкой.

Но если я заменю view.post() на view.postDelayed({notifyItemChanged(0, Unit)}, 1000), все работает как оберег.

Не могли бы вы объяснить, почему это происходит?

1 Ответ

0 голосов
/ 18 июня 2019

Как указано в документации Google:

Post: post приводит к добавлению Runnable в очередь сообщений.PostDelayed: заставляет Runnable быть добавленным в очередь сообщений, чтобы запускаться по истечении указанного промежутка времени.

В вашем случае view.post вызывает немедленное выполнение runnable, поэтому вы сталкиваетесь с этимповедение, в то время как в случае postDelayed это занимает упомянутое время, используя представление перезапуска времени, имеет достаточно времени для повторной обработки или обновления элементов соответственно.

...