Android 更新回收视图
我在recycleView上有点麻烦。 我想使用DiffUtil更新recycleview。 但我不明白为什么它不起作用。 这是我的困难Android 更新回收视图,android,Android,我在recycleView上有点麻烦。 我想使用DiffUtil更新recycleview。 但我不明白为什么它不起作用。 这是我的困难 public class ConsumableDiffCallBack extends DiffUtil.Callback { private List<ConsumableByTask> oldListOfConsumableByTask; private List<ConsumableByTask> newListOfConsum
public class ConsumableDiffCallBack extends DiffUtil.Callback {
private List<ConsumableByTask> oldListOfConsumableByTask;
private List<ConsumableByTask> newListOfConsumableByTask;
@Override
public boolean areItemsTheSame(int oldItemPosition, int newItemPosition) {
return oldListOfConsumableByTask.get(oldItemPosition).getQuantity() != newListOfConsumableByTask.get(newItemPosition).getQuantity();
}
@Override
public boolean areContentsTheSame(int oldItemPosition, int newItemPosition) {
return oldListOfConsumableByTask.get(oldItemPosition).equals(newListOfConsumableByTask.get(newItemPosition));
}}
适配器类中的更新方法
public void updateList(List<ConsumableByTask> list){
final ConsumableDiffCallBack consumableDiffCallBack = new ConsumableDiffCallBack(this.consumableByTaskList,list);
final DiffUtil.DiffResult diffResult = DiffUtil.calculateDiff(consumableDiffCallBack);
this.consumableByTaskList.clear();
this.consumableByTaskList.addAll(list);
diffResult.dispatchUpdatesTo(this);
}
public void updateList(列表){
最终ConsumableDiffCallBack ConsumableDiffCallBack=新的ConsumableDiffCallBack(this.consumableByTaskList,list);
最终DiffUtil.diffesult diffesult=DiffUtil.calculateDiff(consumableDiffCallBack);
this.consumableByTaskList.clear();
this.consumableByTaskList.addAll(列表);
diffResult.dispatchUpdatesTo(本);
}
活动方法
public void sendDataAndCloseFrame() {
List<ConsumableByTask> listOfConsumable = //get new list from server;
adapter.updateList(listOfConsumable);
finish();
}
public void sendDataAndCloseFrame(){
List listOfConsumable=//从服务器获取新列表;
adapter.updateList(可消费列表);
完成();
}
谢谢。我在我的回收站用这个
private List<bindableAssignment> dataBaseItemList;
public void setItems(final List<bindableAssignment> argumentList) {
if (dataBaseItemList == null) {
dataBaseItemList = argumentList;
notifyItemRangeChanged(0, dataBaseItemList.size());
} else {
DiffUtil.DiffResult result = DiffUtil.calculateDiff(new DiffUtil.Callback() {
@Override
public int getOldListSize() {
return dataBaseItemList.size();
}
@Override
public int getNewListSize() {
return argumentList.size();
}
@Override
public boolean areItemsTheSame(int oldItemPosition, int newItemPosition) {
return dataBaseItemList.get(oldItemPosition).getId() == argumentList.get(newItemPosition).getId();
}
@Override
public boolean areContentsTheSame(int oldItemPosition, int newItemPosition) {
bindableAssignment oldItem = dataBaseItemList.get(oldItemPosition);
bindableAssignment newItem = argumentList.get(newItemPosition);
// Change this to apply your object
return oldItem.getId() == newItem.getId()
&& oldItem.getName().equals(newItem.getName())
&& (oldItem.getDesc() != null && newItem.getDesc() != null) && oldItem.getDesc().equals(newItem.getDesc())
&& oldItem.getClassId() == newItem.getClassId()
&& oldItem.getDueTime() == newItem.getDueTime();
}
});
dataBaseItemList = argumentList;
result.dispatchUpdatesTo(this);
}
Log.d("dataBindingAdapter", "Changing data with " + dataBaseItemList.size() + " elements");
}
私有列表数据库itemlist;
公共无效集合项(最终列表){
if(dataBaseItemList==null){
dataBaseItemList=argumentList;
notifyItemRangeChanged(0,dataBaseItemList.size());
}否则{
DiffUtil.diffesult result=DiffUtil.calculateDiff(新的DiffUtil.Callback(){
@凌驾
public int getOldListSize(){
返回dataBaseItemList.size();
}
@凌驾
public int getNewListSize(){
返回argumentList.size();
}
@凌驾
公共布尔值areItemsTheSame(int-oldItemPosition,int-newItemPosition){
返回dataBaseItemList.get(oldItemPosition).getId()==argumentList.get(newItemPosition).getId();
}
@凌驾
公共布尔值是相同的内容(int oldItemPosition,int newItemPosition){
BindableSignment oldItem=dataBaseItemList.get(oldItemPosition);
BindableSignment newItem=argumentList.get(newItemPosition);
//更改此选项以应用对象
返回oldItem.getId()==newItem.getId()
&&oldItem.getName().equals(newItem.getName())
&&(oldItem.getDesc()!=null和&newItem.getDesc()!=null)和&oldItem.getDesc().equals(newItem.getDesc())
&&oldItem.getClassId()==newItem.getClassId()
&&oldItem.getDueTime()==newItem.getDueTime();
}
});
dataBaseItemList=argumentList;
结果。dispatchUpdatesTo(本);
}
Log.d(“dataBindingAdapter”,“使用“+dataBaseItemList.size()+”元素”更改数据”);
}
希望它对你有用。我正在我的回收设备中使用它
private List<bindableAssignment> dataBaseItemList;
public void setItems(final List<bindableAssignment> argumentList) {
if (dataBaseItemList == null) {
dataBaseItemList = argumentList;
notifyItemRangeChanged(0, dataBaseItemList.size());
} else {
DiffUtil.DiffResult result = DiffUtil.calculateDiff(new DiffUtil.Callback() {
@Override
public int getOldListSize() {
return dataBaseItemList.size();
}
@Override
public int getNewListSize() {
return argumentList.size();
}
@Override
public boolean areItemsTheSame(int oldItemPosition, int newItemPosition) {
return dataBaseItemList.get(oldItemPosition).getId() == argumentList.get(newItemPosition).getId();
}
@Override
public boolean areContentsTheSame(int oldItemPosition, int newItemPosition) {
bindableAssignment oldItem = dataBaseItemList.get(oldItemPosition);
bindableAssignment newItem = argumentList.get(newItemPosition);
// Change this to apply your object
return oldItem.getId() == newItem.getId()
&& oldItem.getName().equals(newItem.getName())
&& (oldItem.getDesc() != null && newItem.getDesc() != null) && oldItem.getDesc().equals(newItem.getDesc())
&& oldItem.getClassId() == newItem.getClassId()
&& oldItem.getDueTime() == newItem.getDueTime();
}
});
dataBaseItemList = argumentList;
result.dispatchUpdatesTo(this);
}
Log.d("dataBindingAdapter", "Changing data with " + dataBaseItemList.size() + " elements");
}
私有列表数据库itemlist;
公共无效集合项(最终列表){
if(dataBaseItemList==null){
dataBaseItemList=argumentList;
notifyItemRangeChanged(0,dataBaseItemList.size());
}否则{
DiffUtil.diffesult result=DiffUtil.calculateDiff(新的DiffUtil.Callback(){
@凌驾
public int getOldListSize(){
返回dataBaseItemList.size();
}
@凌驾
public int getNewListSize(){
返回argumentList.size();
}
@凌驾
公共布尔值areItemsTheSame(int-oldItemPosition,int-newItemPosition){
返回dataBaseItemList.get(oldItemPosition).getId()==argumentList.get(newItemPosition).getId();
}
@凌驾
公共布尔值是相同的内容(int oldItemPosition,int newItemPosition){
BindableSignment oldItem=dataBaseItemList.get(oldItemPosition);
BindableSignment newItem=argumentList.get(newItemPosition);
//更改此选项以应用对象
返回oldItem.getId()==newItem.getId()
&&oldItem.getName().equals(newItem.getName())
&&(oldItem.getDesc()!=null和&newItem.getDesc()!=null)和&oldItem.getDesc().equals(newItem.getDesc())
&&oldItem.getClassId()==newItem.getClassId()
&&oldItem.getDueTime()==newItem.getDueTime();
}
});
dataBaseItemList=argumentList;
结果。dispatchUpdatesTo(本);
}
Log.d(“dataBindingAdapter”,“使用“+dataBaseItemList.size()+”元素”更改数据”);
}
希望它对您有效。我在其他地方更改recycleView。您应该回答自己的问题。我在其他地方更改recycleView。您应该回答自己的问题。