RCP Treeview refresh后节点为展开问题
最近遇到个RCP TreeView刷新后不能自动展开刷新前节点的问题,简单描述下。
现象是:在窗口中有一个TreeView控件,刷新后树形结构节点展开的状态不能保持刷新前的样子。
修改前代码逻辑:
1. 取得节点展开的状态保存到变量中。
2. 调用refresh()刷新
3. 将状态设定回TreeView中。
问题的原因:
没有重载equal()和hashcode()函数。这两个函数是refresh()时系统会回调的函数。如果不重载,系统就会调用默认的函数,而系统自带的这两个函数根本不可能起作用,因为它根本不知道你创建的object有哪些属性,也就比较不出来TreeView中两个节点有什么不同。
分析:
其实最重要的是要重载实现equal()函数。因为hashcode()函数是系统为了提高查找速度,先调用hashcode()函数看能否区分不同的两个object。
如果还是区分不了就会调用equal()函数再次比较,所以一定要让equal()函数能区分出TreeView上的节点。
修改后代码逻辑:
1. 实现接口,重载equal()和hashcode()函数。
2. 初始化时设定到Treeview中。
3. 取得节点展开状态
4. 调用refresh()刷新
5. 将状态设定回TreeView