#android #android-recyclerview #android-diffutils
Вопрос:
В моем фрагменте у меня есть наблюдаемые данные livedata, которые вызывают метод updatePlantsList() адаптера для отображения обновленного списка растений.
viewModel.getAllPlants().observe(viewLifecycleOwner) { plantsList -gt; adapter.updatePlantsList(plantsList as MutableListlt;Plantgt;) }
Метод updatePlantsList в адаптере
fun updatePlantsList(plantsNewList: MutableListlt;Plantgt;){ val diffCallback = PlantOriginDiffCallback(this.plantsOriginList, plantsNewList) val diffResults = DiffUtil.calculateDiff(diffCallback, true) plantsOriginList.clear() plantsOriginList.addAll(plantsNewList) diffResults.dispatchUpdatesTo(this) }
И, наконец, класс diffutils
class PlantOriginDiffCallback( private val oldList: Listlt;Plantgt;, private val newList: Listlt;Plantgt; ) : DiffUtil.Callback() { override fun getOldListSize(): Int { return oldList.size } override fun getNewListSize(): Int { return newList.size } override fun areItemsTheSame(oldItemPosition: Int, newItemPosition: Int): Boolean { return oldList[oldItemPosition].plantID == newList[newItemPosition].plantID } override fun areContentsTheSame(oldItemPosition: Int, newItemPosition: Int): Boolean { return oldList[oldItemPosition] == newList[newItemPosition] } }
Теперь вопрос в том, : У меня есть список растений отображается, перейдите на AddPlantFragment где я добавить новое предприятие, и когда я вернуться обратно к PlantsFragment, поначалу наблюдатель называет updatePlantsList() метод с старый список (который, в свою очередь, вызывает diffResults.dispatchUpdatesTo(этот) и, в свою очередь, в onBindViewHolder вызывается) и когда он попадает в новый список, то же самое происходит —
livedata наблюдает за изменениями -gt; вызывает updatePlantsList() в адаптере -gt;gt; это вызывает DiffResults.dispatchUpdatesTo(это), но тогда это все; gt;gt;onBindViewHolder больше не вызывается, поэтому я не вижу обновленный список.
Я в замешательстве. Почему onBindViewHolder не вызывается во второй раз, даже когда вызывается DiffResults.dispatchUpdatesTo(это)? Пожалуйста, помогите! Спасибо