android 自定义view局部刷新,Android 优化之局部刷新

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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值