Обновление данных в гетерогенном обзоре утилит с помощью diffutils в android - PullRequest
0 голосов
/ 21 января 2020

This is the kind of heterogeneous recyclerview I've been working with.

На рисунке желтый блок - это основное представление переработчика, а зеленый блок - это видоискатель, содержащий вид переработчика, в котором размещены синие видоискатели блока. Мой вопрос заключается в том, хотел ли я изменить только один из синих блоков, используя DiffUtils, из действия root, в котором размещается основное представление переработчика.

Структура данных для макета выглядит следующим образом

data class MainObject(
     val list : List<GreenObjects> 
){
data class GreenObjects(
     val list : List<BlueObjects>
)    
}

И это мой текущий класс DiffUtils

class CustomDiffUtils<T>(private val newList : List<T>? , private var oldList : List<T>?
) : DiffUtil.Callback() {

    override fun areItemsTheSame(oldItemPosition : Int , newItemPosition : Int) : Boolean {
        return (newList?.get(newItemPosition).hashCode() == oldList?.get(oldItemPosition).hashCode())
    }

    override fun getOldListSize() : Int {
        return oldList?.size ?: 0
    }

    override fun getNewListSize() : Int {
        return newList?.size ?: 0
    }

    override fun areContentsTheSame(oldItemPosition : Int , newItemPosition : Int) : Boolean {
        return (newList?.get(newItemPosition).hashCode() == oldList?.get(oldItemPosition).hashCode())
    }
}

Я пробовал использовать способ по умолчанию для Diffutils, но дело в том, что я хотел обновить только один из BlueObjects, и если я обновлю один из них и обновите root recyclerview, синие блоки не обновляются, поскольку GreenOjects не обновляются. Как мне этого добиться?

...