我有一个使用ListAdapter (版本1.1.0)的recycler view适配器:
class InnerEpisodeFragmentAdapter(
private val actCtx: Context,
) : ListAdapter<Episode, InnerEpisodeFragmentAdapter.MViewHolder>(COMPARATOR) {
...
RecyclerView是由来自Room数据库中的Episode表的Kotlin Flow提供数据的:
vm.episodesFlow().asLiveData().observe(viewLifecycleOwner) { episodes ->
episodes.let { adapter.submitList(it) }
}
@Query("SELECT * FROM Episode ORDER BY pubDate DESC")
fun episodesFlow(): Flow<List<Episode>>
每当 Episode 表中的元组发生变化时,都会发出一系列新的剧集,并更新回收视图。这个功能可以很好地运行,但每次更新时都会出现令人不爽的闪烁,这会给用户带来不好的体验。
当流向外部发出新的值时,如何避免这种闪烁?在我的应用程序的先前版本中,我使用了像 notifyDataSetChanged() 或 notifyItemChanged() 这样的函数,它们从未出现过闪烁。我知道我仍然可以尝试使用这些函数,但如果我不能避免使用上面展示的 Kotlin 流时的闪烁,我会非常失望。谢谢。