2016-02-08 32 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