什么时候调用 filter(Viewer,TreePath,Object[]) 方法?

when is the filter(Viewer,TreePath,Object[]) method called?

我已经为我的 TreeViewer 对象创建并添加了一个新过滤器。它工作正常,但我似乎无法理解什么时候调用 filter(Viewer,TreePath,Object[])

所以过滤器实际上是一个class的实例,扩展了ViewerFilter,需要实现抽象方法select。在我的例子中,select 总是 returns true 并且我通过覆盖 public Object[] filter(Viewer viewer, Object parent, Object[] elements).

来过滤元素

然而,当我尝试覆盖 public Object[] filter(Viewer viewer, TreePath parentPath, Object[] elements) 时,此函数根本没有被调用。

外观如下:

    myTreeViewer.addFilter(new ViewerFilter()
    {
        @Override
        public Object[] filter(Viewer viewer, TreePath parentPath, Object[] elements)
        {
            /* doesn't get called */
            return elements;
        }

        @Override
        public Object[] filter(Viewer viewer, Object parent, Object[] elements)
        {
            /* gets called normally */
            return elements;
        }

        @Override
        public boolean select(Viewer arg0, Object arg1, Object arg2)
        {
            // TODO Auto-generated method stub
            return true;
        }
    });

我需要使用 TreePath 参数重写过滤方法,以便根据指定级别过滤元素。

在文档中我只能找到以下解释:

Filters the given elements for the given viewer. The input array is not modified. The default implementation of this method calls filter(Viewer, Object, Object[]) with the parent from the path. Subclasses may override

稍后编辑

最后我找不到调用此函数的任何方法,所以我实施了一个解决方法:我在我的模型实例上创建了一个包装器,它也有一个 "parent" 字段。每当我将我的实例插入到树中时(在我的 getChildrengetElements 方法中),我实际上创建了我的包装器的实例并相应地设置父级。

这样,每当 hasChildren 被调用时,我都可以从当前节点导航到根节点。

查看源代码,Eclipse 'search references' 表示没有调用 filterTreePath 版本。

你的 ITreeContentProvider 有一个 getParent(object) 方法可以用来遍历树。