为 ContainerCheckedTreeViewer 设置初始输入
Set initial input for ContainerCheckedTreeViewer
我在为 Eclipse ViewPart 中的 ContainerCheckedTreeViewer 设置初始输入时遇到问题。我在createPartControl
方法里面设置了初始输入,但是内容不是rendered/visible。这只是创建视图时的一个问题(例如 Eclispe startup/opening 第一次创建视图)。在视图完全初始化后设置输入(例如通过 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 的生命周期早期是否有其他方法可以用来设置默认数据?
嗯,晚了,可能来不及了。
我设置了一个 Optional 作为输入,这将不起作用,因为 ViewContentProvider
需要 ModelObject
,而不是 Optional<ModelObject>
。
将 viewer.setInput(data)
更改为 viewer.setInput(data.get())
即可。
我在为 Eclipse ViewPart 中的 ContainerCheckedTreeViewer 设置初始输入时遇到问题。我在createPartControl
方法里面设置了初始输入,但是内容不是rendered/visible。这只是创建视图时的一个问题(例如 Eclispe startup/opening 第一次创建视图)。在视图完全初始化后设置输入(例如通过 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 的生命周期早期是否有其他方法可以用来设置默认数据?
嗯,晚了,可能来不及了。
我设置了一个 Optional 作为输入,这将不起作用,因为 ViewContentProvider
需要 ModelObject
,而不是 Optional<ModelObject>
。
将 viewer.setInput(data)
更改为 viewer.setInput(data.get())
即可。