Java Android recyclerview:notifydatasetchanged或notifydatarangeremoved比notifydatarangeinserted更高效?

Java Android recyclerview:notifydatasetchanged或notifydatarangeremoved比notifydatarangeinserted更高效?,java,android,user-interface,android-recyclerview,Java,Android,User Interface,Android Recyclerview,我有一个recyclerview,它的元素数量一直在变化。有时可能有5项,有时有7项,有时有70项。更改整个数据集的更有效方法是什么: 1) 调用clear(),添加新数据集,然后调用notifydatasetchanged 2) 调用clear(),然后调用notifyitemrangeremoved,然后添加新数据集并调用notifyItemRangeInserted public void swapData(ArrayList<dataType>() newdata) { i

我有一个recyclerview,它的元素数量一直在变化。有时可能有5项,有时有7项,有时有70项。更改整个数据集的更有效方法是什么:

1) 调用clear(),添加新数据集,然后调用notifydatasetchanged

2) 调用clear(),然后调用notifyitemrangeremoved,然后添加新数据集并调用notifyItemRangeInserted

public void swapData(ArrayList<dataType>() newdata) {
 int oldSize = recyclerlist.size();
        recyclerlist.clear();

        if (oldSize > 0) {
            notifyItemRangeRemoved(0, oldSize);
        } ...
}
public void swapData(ArrayList()newdata){
int oldSize=recyclerlist.size();
recyclerlist.clear();
如果(旧尺寸>0){
notifyItemRangeRemoved(0,旧尺寸);
} ...
}

最简单的方法包括几个步骤,但只有在您的物品具有正确的ID时才有效

  • 重写
    getItemId(int位置)
    并返回项目的id
  • 在RecyclerAdapter的构造函数中,添加以下行:

    setHadStableIds(true);
    
  • 切换列表后,只需在swapData方法中使用
    notifyDataSetChanged()