如何刷新FilteredItemsSelectionDialog
我有一个FilteredItemsSelectionDialog
shose基础数据模型可能会在对话框打开时更改。如果结构发生变化,即元素被添加或删除,我无法告诉对话框更新其过滤列表。如何刷新FilteredItemsSelectionDialog
我打过电话refresh()
和reloadCache()
也scheduleRefresh()
(基本上在作业运行reloadCache()
),但所有的方法重新使用最初加入到内容提供商的元素。
我认为可以解决这个问题的方法是重置内容提供者并让它再次调用fillContentProvider()
。然后我可以用模型的当前状态重新填充内容提供者。当然,保留当前的过滤器和选择。
[BEGIN编辑]
基于Greg的答案这里是我也试过:
ItemsFilter overrideFilter;
@Override
protected ItemsFilter createFilter() {
if(overrideFilter != null) {
return overrideFilter;
}
return new LaunchConfigItemsFilter();
}
public void forceRefresh() {
overrideFilter = new ItemsFilter() {
@Override
public boolean matchItem(Object item) {
return false;
}
@Override
public boolean isConsistentItem(Object item) {
return false;
}
@Override
public boolean equalsFilter(ItemsFilter filter) {
return false;
}
@Override
public boolean isSubFilter(ItemsFilter filter) {
return false;
}
};
applyFilter();
overrideFilter = null;
applyFilter();
}
forceRefresh()
被称为每当模型结构的变化。其意图是首先用一个过滤器呼叫applyFilter()
,该过滤器永远不会与现有过滤器匹配,从而触发fillContentProider()
,然后再次使用当前过滤器调用applyFilter()
以恢复匹配的元素。
但是,当一个元素被添加,另一个被删除时,结果是被删除的元素仍然可见。
我也试过的是让createFilter()
返回null
第一次打电话给applyFilter()
。这又使被删除的元素可见。
无论在添加和删除元素之前是否设置了配件,只有在我清除并(重新)输入过滤器后,该列表才会处于有意义的状态。
[编辑完]
给予一定的情况下,在问题清单的启动配置对话框,该代码可以在这里找到: https://github.com/rherrmann/eclipse-extras/blob/master/com.codeaffine.extras.launch/src/com/codeaffine/extras/launch/internal/dialog/LaunchSelectionDialog.java
有谁知道一个办法迫使FilteredItemsSelectionDialog
复位和重新填充其内容提供商?
如果我正确地读取了代码,调用applyFilter
将重新运行所有代码来填充表格,包括调用fillContentProvider
。
当检查是否需要做任何事情applyFilter
调用createFilter
,这必须返回一个过滤器和过滤器的ItemsFilter.equalsFilter
方法时,与以往相比,过滤器必须返回false。
感谢您的回答。我已经在'applyFilter'上摆弄过。我编辑了这个问题以包含我想出的内容。 –
我放弃了。如果列表未经过滤(最困难的情况),则需要用非空虚拟过滤器调用'applyFilter()',并等待它调度的两个作业(这对于将事件置于正确状态下一步),然后再用真实(空)过滤器调用'applyFilter()'。这对我的品味来说太过分了。再次感谢您的帮助。 –