当调用notifyItemChanged方法时,我想更新recyclerview的视图。问题是我不想刷新整个行而只是行的视图。(以避免行的闪烁效果)
有一个名为notifyItemChanged(int,payload obj)的方法。
我可以使用它来实现吗?如果可以,如何做到呢?
当调用notifyItemChanged方法时,我想更新recyclerview的视图。问题是我不想刷新整个行而只是行的视图。(以避免行的闪烁效果)
有一个名为notifyItemChanged(int,payload obj)的方法。
我可以使用它来实现吗?如果可以,如何做到呢?
最终我找到了如何仅更新RecyclerView中某行的特定视图。
(1) 在适配器中重写onBindViewHolder(Recycler.ViewHolder VH, int position, List payloads)
(2) 在该方法中,
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);
}
(3) 因此,要通知数据更改并更新视图,需要调用 notifyItemChanged(int position, Object payload)。需要将自定义对象(保存数据的模型)作为payload对象传递。
adapter.notifyItemChanged(i, obj);
注意:需要禁用 RecyclerView 的 ItemAnimator(默认情况下是启用的)。否则,有效载荷对象将为空。
recyclerView.setItemAnimator(null);
或者((SimpleItemAnimator)recyclerView.getItemAnimator()).setSupportsChangeAnimations(false);
更新:最近我使用了这种方法而不必禁用ItemAnimator,因此不需要禁用ItemAnimator。(recyclerview-v7:25.4.0)
notifiyItemChanged
更改一个项目。 - onoView v = recyclerView.getLayoutManager().findViewByPosition(position);
if (v != null){
//update your view
}
List<String> items = new ArrayList<>();
RecyclerAdapter adapter = new RecyclerAdapter(items);
recyclerView.setAdapter(adapter);
现在我看到你想要将项目插入到RecyclerView中,并调用notifyItemChanged(int position)方法仅添加单个项目。
为此,假设您已更改了列表中位置0的项目的值。那是列表中的第一项。
现在,正确使用notifyItemChanged(int position)方法的方式是
adapter.notifyItemChanged(0);
这意味着,适配器将使用0位置的新值更新recyclerview。