1

我已经在自定义透视图中实现了通用导航器。当我修改一个文件并保存它时,整个树都崩溃了。我尝试通过在资源更改侦听器中使用 refresh(object) 方法而不是 refresh() 来修复它。但是除非重新启动应用程序,否则新创建的项目(自定义定义)不会显示在导航器中。那是因为项目是一个虚拟节点,需要使用 refresh() 刷新整个工作空间。我尝试使用条件语句,但这也不起作用,因为当保存文件时,更改会逐步上升到树的根部,这又需要 refresh() ,这反过来又使我的树崩溃。有什么解决方法吗?

4

1 回答 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 回答