android - 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)
}
解决方案
推荐阅读
- jquery - 如何将选择下拉值绑定为反应表的过滤器?
- angular - 角等待 - 脚本重复运行
- css - Vala - Gtk 标签悬停样式 css
- jquery - JQuery Autocomplete 与 IE7 的兼容性
- javascript - Kendo Grid - vendor.js SCRIPT1002:语法错误
- php - PHP:通过 URL 获取外部网站的主机名(确定主机名是否包含“www”)
- sql - 如何每天获取每个班次的数据
- java - JLabel 忽略 setBounds 方法
- node.js - 尝试运行 npx create-react-app myapp 时面临的问题
- vb.net - 根据工作班次持续时间添加迄今为止的小时数