为 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()) 即可。