如何在eclipse中的常用导航器的实现中保留树状态?

时间:2013-07-26 09:13:48

标签: eclipse eclipse-plugin

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

1 个答案:

答案 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
...