我正在尝试保存JFace TreeViewer
扩展状态,以便在调用setInput()
方法后刷新它。我尝试getExpandedElements
的{{1}},setExpandedElements
,getExpandedTreePaths
,setExpandedTreePaths
方法,但它不起作用。
TreeViewer
答案 0 :(得分:10)
您需要确保TreeViewer的内容提供商提供正确定义hashCode
和equals
方法的对象。 AbstractTreeViewer
需要能够比较旧对象和新对象以确定其扩展状态。如果未提供hashCode
和equals
,则这是一个简单的参考检查,如果您重新创建了内容,则无效。
答案 1 :(得分:3)
如this thread中所述,请查看已故的ResourceNavigator
org.eclipse.ui.views.navigator
包。
(“迟到”因为该类不再直接使用,请参阅Eclipse Wiki)。
它使用
TreeViewer
,并保存扩展元素和所选元素以及其他状态 模型元素是IResource
个对象,使用IPersistableElement
/IElementFactory
机制保留。IPersistableElement
适配器已在类IResource
中针对WorkbenchAdapter
注册,但这可以通过直接实现IPersistableElement
的模型元素获取。 相应的IElementFactory
在elementFactory
的{{1}}的{{1}}扩展名中声明。已恢复的资源知道如何通过树的内容提供者获取自己的子级(和父级),因此不需要保留树的所有元素。
可以使用类似的方法来保存查看者的输入资源 对于
org.eclipse.ui.ide
,通过其plugin.xml
的当前帧有一个间接级别,但是如果你在调试器中单步执行它,你会发现它基本上做同样的事情。
小提取(但其余代码也保存了许多其他内容,包括选择)
ResourceNavigator