Отправьте тот же список, используя AsyncListDiffer, но представление рециркулятора всегда автоматически прокручивается вверх - PullRequest
0 голосов
/ 14 октября 2019

Я пытаюсь отправить тот же список, используя AsyncListDiffer, но представление рециркулятора всегда автоматически прокручивается вверх. Когда я отлаживаю, я вижу, что автопрокрутка наверх реселлера просматривается после вызова submitList перед вызовом метода areItemsTheSame

class TestPlaceAdapter(
    private val itemClickCallback: (TestPlaceUi) -> Unit
) : RecyclerView.Adapter<TestPlaceAdapter.ItemViewHolder>() {

    private val differ = AsyncListDiffer(this, DiffCallback())
    private val listTest = mutableListOf<TestPlaceUi>()

    fun setData(listPlace: List<TestPlaceUi>) {
        if (listTest.size == 0) {
            listTest.addAll(listPlace)
            differ.submitList(listTest)
        } else {
            val test = mutableListOf<TestPlaceUi>().apply {
                addAll(listTest)
            }
            differ.submitList(test)
        }
    }

    private class DiffCallback : DiffUtil.ItemCallback<TestPlaceUi>() {
        override fun areItemsTheSame(oldItem: TestPlaceUi, newItem: TestPlaceUi): Boolean {
            return oldItem.id == newItem.id
        }

        override fun areContentsTheSame(oldItem: TestPlaceUi, newItem: TestPlaceUi): Boolean {
            return oldItem == newItem
        }
    }
    ...
 }

TestPlaceUi - это класс данных и не переопределяет равные и хэш-коды.

1 Ответ

0 голосов
/ 14 октября 2019

Я обнаружил свою ошибку, вызванную использованием третьей стороны с использованием скелета. Это сбрасывает адаптер на просмотр.

...