u2g*_*les 5 android android-recyclerview android-listadapter kotlin-flow
我有一个回收器视图,其适配器使用 ListAdapter (版本 1.1.0):
class InnerEpisodeFragmentAdapter(
private val actCtx: Context,
) : ListAdapter<Episode, InnerEpisodeFragmentAdapter.MViewHolder>(COMPARATOR) {
...
Run Code Online (Sandbox Code Playgroud)
回收器视图由来自 Room 数据库 Episode 表的 kotlin 流提供:
vm.episodesFlow().asLiveData().observe(viewLifecycleOwner) { episodes ->
episodes.let { adapter.submitList(it) }
}
@Query("SELECT * FROM Episode ORDER BY pubDate DESC")
fun episodesFlow(): Flow<List<Episode>>
Run Code Online (Sandbox Code Playgroud)
例外的是,每次剧集表中的元组发生更改时,都会发出新的剧集列表并更新回收器视图。
它工作正常,但每次更新时都会出现可怕的闪烁。它给用户带来了糟糕的体验。
当流发出新值时如何避免这种闪烁?
在我的应用程序的先前版本中,我使用了像notifyDataSetChanged()或notifyItemChanged()这样从不闪烁的函数。我知道我仍然可以尝试使用这些函数,但如果我在使用kotlin时无法避免闪烁,我会非常失望流程如上图。谢谢。
你们这些比较者
areItemsThesame() 的实现是错误的。您正在比较的是旧对象和新对象可能不是相同对象的引用。相反,您可以使用某种 uuid 来比较两者,例如主键。如果对象不同,它将返回 false,因此永远不会调用 areContentsTheSame,否则如果对象相同,则比较内容没有意义,因为 oldObject 和 newObject 都指向相同的引用。
抱歉,我是从手机上写的,有错误
| 归档时间: |
|
| 查看次数: |
4096 次 |
| 最近记录: |