cha*_*ura 7 android notifydatasetchanged android-recyclerview
我想在调用notifyItemChanged时更新recyclerview的视图.问题是我不想刷新整行而只想刷新行的视图.(以避免行的闪烁效果)
有一个名为notifyItemChanged(int,payload obj)的方法.
我可以用它来实现吗?如果是这样怎么办?
cha*_*ura 14
最后,我发现如何仅更新RecyclerView中行的特定视图.
(1 )在适配器中覆盖onBindViewHolder(Recycler.ViewHolder VH,int position,List payloads)
(2)在onBindViewHolder方法里面,
if(payloads != null && !payloads.isEmpty() && (payloads.get(0) instanceof customObject)){
// update the specific view
}else{
// I have already overridden the other onBindViewHolder(ViewHolder, int)
// The method with 3 arguments is being called before the method with 2 args.
// so calling super will call that method with 2 arguments.
super.onBindViewHolder(holder,position,payloads);
}
Run Code Online (Sandbox Code Playgroud)
(3)因此要通知数据更改并更新视图,需要调用notifyItemChanged(int position,Object payload).需要传递customObject(保存数据的模型)作为有效负载对象.
adapter.notifyItemChanged(i, obj);
Run Code Online (Sandbox Code Playgroud)
注意:需要禁用RecyclerView的ItemAnimator(默认情况下已启用).否则,有效负载对象将为空.
recyclerView.setItemAnimator(null);
Run Code Online (Sandbox Code Playgroud)
要么
((SimpleItemAnimator)recyclerView.getItemAnimator()).setSupportsChangeAnimations(false);
Run Code Online (Sandbox Code Playgroud)
更新:我最近使用了这种方法而没有禁用ItemAnimator.因此无需禁用ItemAnimator. - (recyclerview-v7:25.4.0)
| 归档时间: |
|
| 查看次数: |
6266 次 |
| 最近记录: |