我在我的项目中使用 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)
}