Hugo

一个沉淀知识的地方!

0%

RecyclerView 局部刷新,指定刷新对应item的控件

可以使用

1
mAdapter.notifyItemChanged(index,1)

第一个参数 index 是刷新哪个item
第二个参数是哪个item里的哪些控件需要刷新的判断值需要我们自己处理,或者不传刷新整个item;

在 Adapter 中复写

1
2
3
4
5
onBindViewHolder(
holder: BaseViewHolder,
position: Int,
payloads: MutableList<Any>
)

该方法如下:

1
2
3
4
5
6
7
8
9
10
11
override fun onBindViewHolder(
holder: BaseViewHolder,
position: Int,
payloads: MutableList<Any>
) {
if (payloads.isEmpty()){
onBindViewHolder(holder,position)
}else{
super.onBindViewHolder(holder, position)
}
}

payloads就是我们在刷新 该item是传入的第二个参数
根据 payloads 参数进行判断需要刷新那些控件;如果该参数为null哪么就需要刷新整个item

在某些情况下recycerView刷新会有闪烁的情况 我们只需要禁止recycleView的动画就好了 如下:

1
(swipeRecyclerView?.getItemAnimator() as DefaultItemAnimator).setSupportsChangeAnimations(false)

还有一种是设置动画播放时间为0;
如下:

1
swipeRecyclerView?.getItemAnimator()?.setChangeDuration(0);// 通过设置动画执行时间为0来解决闪烁问题

不过不推荐使用这种方法,因为在某些情况刷新的item下一个item会晃动一下。