我有过滤CheckboxTreeViewer
器,在树查看器上应用过滤器之前,我检查了一个项目。我的过滤器正在处理文本框并ModifyListener
在写作时使用功能。
text.addModifyListener(new ModifyListener() {
public void modifyText(ModifyEvent e) {
refreshFilter();
}
});
private void refreshFilter() {
myFilter.setFilter(text.getText());
checkboxTreeViewer.refresh();
}
过滤器工作正常,但应用过滤器后,我的旧选择变得未选中。也许情况大约是LabelProvider
或ContentProvider
。
我试图打电话checkboxTreeViewer.refresh(false);
不工作。
我还通过刷新阅读了有关崩溃问题的信息。建议是实现一个IElementComparer
和覆盖equals()
和hashCode()
功能,也许可以用这种方式解决取消选中的问题。
这是我的内容提供者:
private class MyTreeContentProvider implements ITreeContentProvider {
@Override
public void dispose() {
}
@Override
public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
}
@Override
public Object[] getElements(Object inputElement) {
return ((List) inputElement).toArray(new Object[0]);
}
@Override
public Object[] getChildren(Object parentElement) {
if(parentElement instanceof FirstClass) {
FirstClass is = (FirstClass)parentElement;
return dbc.runJob(Util.byId(is.getId()).joinPrsl(true).joinIsltm(true)).getList().toArray(new SecondClass[0]);
} else
return new Object[0];
}
@Override
public Object getParent(Object element) {
return null;
}
@Override
public boolean hasChildren(Object element) {
if(element instanceof SecondClass)
return false;
else
return true;
}
}
作为结论,我无法解决我的问题,我需要你的帮助。