我已经在自定义透视图中实现了通用导航器。当我修改一个文件并保存它时,整个树都崩溃了。我尝试通过在资源更改侦听器中使用 refresh(object) 方法而不是 refresh() 来修复它。但是除非重新启动应用程序,否则新创建的项目(自定义定义)不会显示在导航器中。那是因为项目是一个虚拟节点,需要使用 refresh() 刷新整个工作空间。我尝试使用条件语句,但这也不起作用,因为当保存文件时,更改会逐步上升到树的根部,这又需要 refresh() ,这反过来又使我的树崩溃。有什么解决方法吗?
问问题
90 次
1 回答
0
这就是我为基于导航器的视图执行此操作的方式:
/**
* Try to preserve the collapsed tree state of its nodes after an update of
* the view or the model
*
* @param theRoot
* the parent element
*/
private static void preserveTreeState(Object theRoot) {
int i = 0, j = 0;
Object elem[] = treeViewer.getExpandedElements();
treeViewer.setInput(theRoot);
treeViewer.expandAll();
Object elem1[] = treeViewer.getExpandedElements();
treeViewer.collapseAll();
while (i < elem.length) {
j = 0;
while (j < elem1.length) {
if (elem[i] instanceof ObjectParent
&& elem1[j] instanceof ObjectParent) {
if (!((ObjectParent) elem[i]).getFText().equals("//")
&& !((ObjectParent) elem1[j]).getFText()
.equals("//")) {
if (((ObjectParent) elem[i]).getFText().equals(
((ObjectParent) elem1[j]).getFText())) {
treeViewer.expandToLevel(elem1[j], 1);
}
}
}
...
//here I compare all the possible custom objects in my custom navigator
...
于 2013-11-20T09:08:45.473 回答