У меня есть фильтр на моем CheckboxTreeViewer
и перед применением фильтра на treeviewer я проверил элемент. Мой фильтр работает с текстовым полем и использует функцию ModifyListener
во время записи.CheckboxTreeViewer снял флажки с моего выбора после вызова refresh()
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()
, и, возможно, снять эту проблему можно с помощью этого способа.
Вот мой ContentProvider:
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;
}
}
В заключение, я не могу решить мою проблему, и мне нужна ваша помогает.
Я думаю, нам нужно увидеть код вашего контент-провайдера. –
@ greg-449 Я добавил код поставщика контента – cgrgcn