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

 

posted @ 2016-04-19 20:28  杰森2019  阅读(376)  评论(0编辑  收藏  举报