2016-02-08 30 views
0

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

这是我的部分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

呃,太晚了,可能太晚了。

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

viewer.setInput(data)更改为viewer.setInput(data.get())会诀窍。

+0

当然你的contentprovider希望你的数据是正确的。 – SomeDude

+0

当然,当你传递其他东西时,它不会抛出。 – jasper