Java 为ContainerCheckedTreeViewer设置初始输入

Java 为ContainerCheckedTreeViewer设置初始输入,java,swt,eclipse-rcp,treeviewer,Java,Swt,Eclipse Rcp,Treeviewer,我无法在Eclipse ViewPart中设置ContainerCheckedTreeViewer的初始输入。我在createPartControl方法中设置了初始输入,但内容不呈现/可见。只有在创建视图时(例如,Eclispe启动/首次打开视图),这才是一个问题。在视图完全初始化且树正确呈现后,设置输入(例如,通过oberservable) 这是我的partcreatePartControl方法,它不起作用,而update方法起作用 private ContainerCheckedTreeVi

我无法在Eclipse ViewPart中设置ContainerCheckedTreeViewer的初始输入。我在
createPartControl
方法中设置了初始输入,但内容不呈现/可见。只有在创建视图时(例如,Eclispe启动/首次打开视图),这才是一个问题。在视图完全初始化且树正确呈现后,设置输入(例如,通过oberservable)

这是我的part
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...
    }   
}
专用容器检查浏览器;
//...
@凌驾
公共void createPartControl(复合父级){
//可选数据=null;
//设置数据
//...
contentProvider=新视图contentProvider(查看器);
查看器=新的ContainerCheckedTreeViewer(父级,SWT.MULTI | SWT.H|u滚动体| SWT.V|u滚动体);
viewer.setContentProvider(contentProvider);
setLabelProvider(新的defaultObjectLabelProvider());
viewer.addCheckStateListener(this);
viewer.setSorter(空);
if(data.isPresent()){
viewer.setInput(data);//实际调用此函数,命中断点,数据看起来正常
}   
expandAll();
//做其他事情
}
@凌驾
公共无效更新(可观察o,对象arg){
if(模型对象的arg实例){
viewer.setInput(arg);//这很有效。。。
}   
}

在ViewPart生命周期的早期,我是否遗漏了一些东西,或者是否有其他方法可以用来设置默认数据?

嗯,现在已经晚了,可能已经太晚了

我将一个可选设置为输入,这将不起作用,因为
ViewContentProvider
需要一个
ModelObject
,而不是
Optional


viewer.setInput(data)
更改为
viewer.setInput(data.get())
会起作用。

当然,您的内容提供商希望您的数据是正确的。当然,当您传递其他内容时,它会抛出,当然也不会抛出。。。