设置ContainerCheckedTreeViewer的初始输入

时间:2016-02-08 19:59:28

标签: java swt eclipse-rcp treeviewer

我在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的生命周期早期,我是否遗漏了一些应该用于设置默认数据的其他方法?

1 个答案:

答案 0 :(得分:0)

嗯,现在已经很晚了,可能为时已晚。

我设置了一个可选输入,由于ViewContentProvider需要ModelObject而不是Optional<ModelObject>,因此无法正常工作。

viewer.setInput(data)更改为viewer.setInput(data.get())可以解决问题。