我尽可能多地替换项目,然后根据条件添加或删除项目。
public void addFileListEntries(List<FileListEntry> fileListEntries) {
for (int i = 0; i < Math.min(mFileListEntries.size(), fileListEntries.size()); i++) {
mFileListEntries.set(i, fileListEntries.get(i));
notifyItemChanged(i);
}
if (mFileListEntries.size() > fileListEntries.size()) {
ArrayList<FileListEntry> subList = new ArrayList<>(mFileListEntries
.subList(fileListEntries.size(), mFileListEntries.size() - 1));
mFileListEntries.removeAll(subList);
notifyItemRangeRemoved(fileListEntries.size(),
fileListEntries.size() + subList.size() - 1);
} else if (mFileListEntries.size() < fileListEntries.size()) {
ArrayList<FileListEntry> subList = new ArrayList<>(fileListEntries
.subList(mFileListEntries.size(), fileListEntries.size() - 1));
mFileListEntries.addAll(subList);
notifyItemRangeInserted(mFileListEntries.size(),
mFileListEntries.size() + subList.size() - 1);
}
}
此处mFileListEntries
是adpter的DataSet,而fileListEntries
是新的DataSet。
答案 0 :(得分:0)
我想Android中的customTasksDataGrid.ItemsSource = model;
customTasksDataGrid.Items.SortDescriptions.Add(new SortDescription("DueDate", ListSortDirection.Ascending));
实现默认会有效地处理这个问题。您只需将RecyclerView
分配给fileListEntries
并调用mFileListEntries
(在主要主题中)。如果您不想更改notifyDataSetChanged
对象,请在调用mFileListEntries
之前将其清除并addAll
fileListEntries
。
事实上,您第一次多次调用notifyDataSetChanged
可能会造成更多伤害。仅当您知道添加/删除/更改的项目的确切子集时,才会使用notifyItemChanged
,notifyItemChanged
和notifyItemRangeRemoved
。