Vla*_*lie 6 java swt eclipse-plugin jface eclipse-rcp
我正在开发Eclipse RCP应用程序,并且我正在尝试使用ILazyTreeContentProvider实现,以便在特定时间仅显示可见项目.
代码:
在扩展ViewPart的类中:
public void createPartControl(Composite parent) {
viewer = new TreeViewer(parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL | SWT.VIRTUAL);
drillDownAdapter = new DrillDownAdapter(viewer);
viewer.setContentProvider(new ViewContentProvider());
viewer.setLabelProvider(new ViewLabelProvider());
//viewer.setSorter(new NameSorter());
viewer.setInput(getViewSite());
// Create the help context id for the viewer's control
PlatformUI.getWorkbench().getHelpSystem().setHelp(viewer.getControl(), "test.provider.lazy.viewer");
makeActions();
hookContextMenu();
hookDoubleClickAction();
contributeToActionBars();
}
Run Code Online (Sandbox Code Playgroud)
在ContentProvider中:
@Override
public void updateElement(Object parent, int index) {
System.out.println(updateElementCounter++);
if (parent.equals(getViewSite())) {
if (index == 0) {
TreeParent child = new TreeParent("Parent 1");
viewer.replace(parent, index, child);
viewer.setHasChildren(child, true);
} else {
TreeParent child = new TreeParent("Parent 2");
viewer.replace(parent, index, child);
viewer.setHasChildren(child, true);
//viewer.setChildCount(child, 1);
}
} else {
if (parent instanceof TreeParent) {
TreeParent treeParent = (TreeParent) parent;
if (treeParent.getName().equals("Parent 1")) {
TreeObject child = new TreeObject("Leaf "+index);
viewer.replace(treeParent, index, child);
viewer.setHasChildren(child, false);
//viewer.setChildCount(child, 0);
} else {
TreeObject child = new TreeObject("Special One");
viewer.replace(treeParent, index, child);
viewer.setHasChildren(child, false);
//viewer.setChildCount(child,0);
}
}
}
}
@Override
public void updateChildCount(Object element, int currentChildCount) {
if (element.equals(getViewSite())) {
viewer.setChildCount(getViewSite(), 2);
} else
if (element instanceof TreeParent) {
TreeParent parent = (TreeParent) element;
if (parent.getName().equals("Root")) {
viewer.setChildCount(parent, 2);
} else if (parent.getName().equals("Parent 1")) {
viewer.setChildCount(parent, 20);
} else {
viewer.setChildCount(parent, 1);
}
} else {
viewer.setChildCount(element, 0);
}
}
Run Code Online (Sandbox Code Playgroud)
问题是每次我扩展TreeItem的子节点时,它会加载所有子元素,而不仅仅是可见的子元素,而System.out.println(updateElementCounter++);命令打印出所有22个,尽管只有7个Tree Items可见.

不应该ILazyTreeContentProvider只加载那些可见的吗?(在这种情况下,它是7项)
我一定做错了什么...
无论如何,任何意见都非常感谢!
我将我的例子与这个例子进行了比较 ,我发现只有一个差异导致了所有的差异:
v.setUseHashlookup(true); //v is the TreeViewer
Run Code Online (Sandbox Code Playgroud)
该方法在其文档中说明了什么:
配置此结构化查看器是否使用内部哈希表来加速元素和 SWT 项之间的映射。必须在向查看器提供输入(通过 setInput)之前调用此函数。
现在内容提供商其实很懒。只绘制可见的项目,而不是全部。
| 归档时间: |
|
| 查看次数: |
1604 次 |
| 最近记录: |