首页 > 解决方案 > diffutil areContentsTheSame 函数只比较新项目

问题描述

我在我的项目中使用 AsyncListDiffer,其中我在主页中有很多引号

下面是我在我的 recyclerview 适配器中编写的代码

private val diffCallback = object : DiffUtil.ItemCallback<Quote>() {
        override fun areItemsTheSame(oldItem: Quote, newItem: Quote): Boolean {
            return oldItem.id == newItem.id
        }

        override fun areContentsTheSame(oldItem: Quote, newItem: Quote): Boolean {
           Log.d("mytag", "$oldItem , $newItem")
        return oldItem == newItem
    }

}

当我更改引用对象中的某些内容时,我会将其提交给 ListDiffer。如您所见,我正在areContentsTheSame函数内记录 newItem 和 oldItem。这里两者oldItem都是newItem相同的对象(我的意思是它们的内容是我最近更新的那个),我认为 oldItem 应该给我旧的未更新项目,但它没有

(我已经尝试复制列表,然后提交不同的,它不起作用)

fun updateQuote(quoteId :String,newQuote: Map<String,String>) = viewModelScope.launch(Dispatchers.IO) {
        _updateQuote.postValue(DataState.Loading())
        val response = mainRepository.updateQuote(quoteId, newQuote)
        val handledResponse = handleQuoteResponse(response)
        val quoteToUpdate = quoteList.find { quote -> quote.id == quoteId}
        quoteToUpdate?.genre = newQuote["genre"]
        quoteToUpdate?.quote = newQuote["quote"]
        _quotes.postValue(DataState.Success(QuotesResponse(quoteList.map { it.copy() })))
        _updateQuote.postValue(handledResponse)
    }

标签: androidandroid-recyclerviewandroid-diffutilsandroid-asynclistdiffer

解决方案


推荐阅读