我已经在自定义视角中实现了通用导航器。当我修改文件并保存它时,整个树都会崩溃。我尝试使用资源更改侦听器中的refresh(object)方法而不是refresh()来修复它。但是,除非重新启动应用程序,否则新创建的项目(自定义定义)不会显示在导航器中。这是因为项目是虚拟节点,需要使用refresh()刷新整个工作区。我尝试使用条件语句,但这也不起作用,因为当保存文件时,更改逐步上升到树的根,再次需要refresh(),然后折叠我的树。有没有解决方法?
答案 0 :(得分: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
...