版本为14
在getChildCount设置断点,发现每次展开一个节点,会多次调用getChildCount这个方法,并且query.getParent()有时候是null,有时候是真正被点击的那个父结点,这导致点击父结点时,返回的ChildCount为1(Parent为null时),或者是真实的子结点个数(比如说12)
又在fetchChildrenFromBackEnd()方法的返回值进行断点,发现返回的数据正常,为12条.
最后的结果是展开都是同一个(对象地址相同)节点
这看起来像是getChildCount在获取被展开的父结点,query.getParent()==null时,返回1而导致的问题
然而为什么query.getParent()会偶尔是null?
HierarchicalDataProvider<FileModel, Void> provider = new AbstractBackEndHierarchicalDataProvider<FileModel, Void>() {
@Override
public boolean hasChildren(FileModel item) {
return true;
}
@Override
public int getChildCount(HierarchicalQuery query) {
String parentPath = "";
FileModel file = (FileModel) query.getParent();
if (file != null) {
if (file.getParentPath() == null || file.getParentPath().equals("")) {
parentPath = file.getName();
} else {
parentPath += file.getParentPath() + "/" + file.getName();
}
}
return fileDao.FolderChild(archiveId, parentPath, null, false).size();
}
@Override
protected Stream<FileModel> fetchChildrenFromBackEnd(HierarchicalQuery query) {
String parentPath = "";
FileModel file = (FileModel) query.getParent();
if (file != null) {
if (file.getParentPath() == null || file.getParentPath().equals("")) {
parentPath = file.getName();
} else {
parentPath += file.getParentPath() + "/" + file.getName();
}
}
List<FileModel> list = fileDao.FolderChild(archiveId, parentPath, null, false);
String finalParentPath = parentPath;
list.forEach(i -> {
i.setArchiveId(archiveId);
i.setParentPath(finalParentPath);
});
return list.stream().limit(query.getLimit()).skip(query.getOffset());
}
};