TreeViewer 中类似节点的更新未正确发生
Update not happening properly for similar nodes in a TreeViewer
在一个TreeViewer中,有两个相似的节点。他们使用相同的数据对象。当我 select 底部节点并修改时,它会更新顶部节点但底部节点没有变化。
更新前:
更新后:
我在修改节点名称后使用TreeViewer.refresh(problemNode)
。 TreeViewer.refresh(Object element)
的 Javadoc 说,树从给定的元素开始更新。任何原因,为什么它要更新顶级节点?因为,它使用相同的数据对象,难道不应该更新两个节点吗?
如果您在树的两个部分中使用相同的对象,就会出现这种情况。
'same object' 我的意思是 equals
和 hashCode
方法使对象看起来相同。
您可以通过为树查看器使用 IElementComparer
class 来解决此问题。有了这个,你必须实施
public boolean equals(Object a, Object b);
public int hashCode(Object element);
并确保比较器 equals
方法 returns false
在比较树中的两个元素时,元素最好具有不同的 hashCode
.
调用 TreeViewer.setComparer
告诉树查看器有关比较器的信息。
在一个TreeViewer中,有两个相似的节点。他们使用相同的数据对象。当我 select 底部节点并修改时,它会更新顶部节点但底部节点没有变化。
更新前:
更新后:
我在修改节点名称后使用TreeViewer.refresh(problemNode)
。 TreeViewer.refresh(Object element)
的 Javadoc 说,树从给定的元素开始更新。任何原因,为什么它要更新顶级节点?因为,它使用相同的数据对象,难道不应该更新两个节点吗?
如果您在树的两个部分中使用相同的对象,就会出现这种情况。
'same object' 我的意思是 equals
和 hashCode
方法使对象看起来相同。
您可以通过为树查看器使用 IElementComparer
class 来解决此问题。有了这个,你必须实施
public boolean equals(Object a, Object b);
public int hashCode(Object element);
并确保比较器 equals
方法 returns false
在比较树中的两个元素时,元素最好具有不同的 hashCode
.
调用 TreeViewer.setComparer
告诉树查看器有关比较器的信息。