我在Eclipse ViewPart中设置ContainerCheckedTreeViewer的初始输入时遇到问题。我在createPartControl
方法中设置了初始输入,但内容未呈现/可见。这只是创建视图时的问题(例如Eclispe首次启动/打开视图)。在视图完全初始化后设置输入(例如通过oberservable)可以正常工作并正确地呈现树。
以下是我的部分createPartControl
方法不起作用以及update
方法有效。
private ContainerCheckedTreeViewer viewer;
//...
@Override
public void createPartControl(Composite parent) {
//Optional<ModelObject> data = null;
//Setting data
//...
contentProvider = new ViewContentProvider(viewer);
viewer = new ContainerCheckedTreeViewer(parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL);
viewer.setContentProvider(contentProvider);
viewer.setLabelProvider(new DefaultEObjectLabelProvider());
viewer.addCheckStateListener(this);
viewer.setSorter(null);
if(data.isPresent()){
viewer.setInput(data); //This is actually called, breakpoint is hit, data looks ok
}
viewer.expandAll();
//doing other stuff
}
@Override
public void update(Observable o, Object arg) {
if (arg instanceof ModelObject){
viewer.setInput(arg); //This works...
}
}
在ViewPart的生命周期早期,我是否遗漏了一些应该用于设置默认数据的其他方法?
答案 0 :(得分:0)
嗯,现在已经很晚了,可能为时已晚。
我设置了一个可选输入,由于ViewContentProvider
需要ModelObject
而不是Optional<ModelObject>
,因此无法正常工作。
将viewer.setInput(data)
更改为viewer.setInput(data.get())
可以解决问题。