Search code examples
javaeclipseuser-interfacejfacetreeviewer

Saving TreeViewer state before setInput()


I'm trying to save JFace TreeViewer expansion state to refresh it after calling setInput() method. I tried getExpandedElements, setExpandedElements, getExpandedTreePaths, setExpandedTreePaths methods of TreeViewer but it doesn't work.

Object[] expandedElements = viewer.getExpandedElements();
TreePath[] expandedTreePaths = viewer.getExpandedTreePaths();
viewer.setInput();
viewer.setExpandedElements(expandedElements);
viewer.setExpandedTreePaths(expandedTreePaths);

Solution

  • You need to make sure that your TreeViewer's content provider provides objects that have their hashCode and equals methods properly defined. AbstractTreeViewer needs to be able to compare the old and new objects to determine their expansion state. If hashCode and equals aren't provided, it's a simple reference check, which won't work if you've recreated your contents.