RecyclerView 局部刷新
相信现在已经很少人不用 RecyclerView 了,如果只有一个 item 的数据源改变的时候,大家都会用 notifyItemChanged(int position) 而不是 notifyDataSetChanged ,这就是最简单的局部刷新。但是这还不够,有时候我们需要只刷新一个 item 的 某条数据,比较熟悉的例子是微信朋友圈点赞,这时候怎么办呢?答案是还是用 notifyItemChanged 方法,不过是它的重载方法,notifyItemChanged(int position, @Nullable Object payload)。
小tips
我们默认调用 notifyItemChanged 会发现 item 会闪一下,这是 RecyclerView 默认动画的缘故,由于各种各样的原因(设计师觉得不美观,动画相对来说耗性能),我们会去掉这个动画,简单粗暴的方法是直接设置 RecyclerView 的默认动画为空:
recycler.itemAnimator = null
但是 RecyclerView 默认的增加、移除 item 的动画挺好看的,如果我们的需求是只去掉 item 更新的闪动动画,可以这样做:
fun RecyclerView.closeChangeAnim() {
if (this.itemAnimator is DefaultItemAnimator) {
(this.itemAnimator as DefaultItemAnimator).supportsChangeAnimations = false
}
}
言归正传,要想局部刷新成功,只调用 notifyItemChanged(int position, @Nullable Object payload) 是没有效果的,还要重写 onBindViewHolder(ViewHolder holder, int position, List payload)方法。下面是示例代码:
MyBean
data class MyBean(
val title: String = "",
val content: String = ""
)
My