Kotlin 使用diffutil的recyclerview中的submitList()会导致recyclerview闪烁
我有一个从远程源更新的recyclerview,所以它工作得很好,唯一恼人的是,当屏幕被刷新并触发get请求时,即使适配器中没有任何更改导致屏幕闪烁,recyclerview也会被更新,这很恼人 我试着去应付困难,但没有结果 在我的主要片段中:Kotlin 使用diffutil的recyclerview中的submitList()会导致recyclerview闪烁,kotlin,android-recyclerview,listadapter,android-diffutils,Kotlin,Android Recyclerview,Listadapter,Android Diffutils,我有一个从远程源更新的recyclerview,所以它工作得很好,唯一恼人的是,当屏幕被刷新并触发get请求时,即使适配器中没有任何更改导致屏幕闪烁,recyclerview也会被更新,这很恼人 我试着去应付困难,但没有结果 在我的主要片段中: viewModel.fetchTopHeadline() 后面跟着一个观察员 topHeadline.observe(this@FeedFragment, Observer { if(it == null) return@Observ
viewModel.fetchTopHeadline()
后面跟着一个观察员
topHeadline.observe(this@FeedFragment, Observer {
if(it == null) return@Observer
topHeadlineAdapter.submitList(it)
})
我的适配器:
class TopHeadlineAdapter:ListAdapter
最后是我的diffutilCallback课程:
class TopHeadlineDiffCallback :DiffUtil.ItemCallback<Article>(){
override fun areItemsTheSame(oldItem: Article, newItem: Article): Boolean {
return oldItem.id == newItem.id
}
override fun areContentsTheSame(oldItem: Article, newItem: Article): Boolean {
return oldItem == newItem
}
}
class-TopHeadlineDiffCallback:DiffUtil.ItemCallback(){
覆盖乐趣项目相同(旧项目:文章,新项目:文章):布尔值{
返回oldItem.id==newItem.id
}
覆盖内容相同(旧项:文章,新项:文章):布尔值{
返回oldItem==newItem
}
}
文章类是什么样子的?它是否覆盖了equals()
方法?只是一个简单的数据类,@Entity(tableName=“TopHeadline”,Index=[Index(value=[“publishedAt”],unique=true)])数据类文章(@PrimaryKey(autoGenerate=true)val-id:Int?=null,val-author:String?,val-content:String?,val-description:String?,val-publishedAt:String?,@Embedded(prefix=“source”?)val-source:source,val-title:String?,val-url:String?,val-urlToImage:String?)如果RecyclerView
正在设置动画,则表示适配器认为项目已更改。请确保对象具有相同的id和完全相同的内容您是对的,从远程下载后,我正在处理本地数据库中的数据,因此id已更改,这导致新项目id不等于旧项目id