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

 

转载于:https://www.cnblogs.com/JerryloveAda/p/5409964.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值