jface TreeViewer 刷新后恢复之前的展开状态

当TreeViewer的输入模型发生变化,也就是setInput(Object object)方法的参数,需要使用refresh()刷新TreeViewer,刷新后TreeViewer会折叠所有的节点,怎么恢复之前的展开状态呢?

注意,TreeViewer每一个节点是Catalog类型,自己定义的类。

 

Object[] expandElements = (Object[]) treeViewer.getExpandedElements();// 获取刷新之前展开的元素
treeViewer.refresh();

注意,要在刷新之前获取展开的元素,因为刷新之后默认折叠所有节点。这时不能直接调用treeViewer.setExpandedState(Object, boolean)方法,因为输入模型已经发生变化,恢复展开状态是要展开新的节点,而expandElements存储的是旧的节点,所以要先获取新的节点。

 

List expandParentCatalogs = new ArrayList();
for (Object expandElement : expandElements) {
	if (expandElement instanceof Catalog) {// 获取刷新之前展开的父目录
               expandParentCatalogs.add((Catalog) expandElement);
        }
}

for (Catalog parentCatalog : parentCatalogs) {// 恢复刷新之前展开的父目录
	for (Catalog expandParentCatalog : expandParentCatalogs) {
		if (expandParentCatalog.getCatalogName().trim().equals(parentCatalog.getCatalogName().trim())) {
			treeViewer.setExpandedState(parentCatalog, true);
			break;
		}
	}
}

你可能感兴趣的:(eclipse,plugin/rcp)