将参数传递给视图
在我的RCP应用程序中,我在左侧有一个带有用于导航的TreeViewer
的视图,而在右侧有一个用于我的视图的文件夹。 透视看起来像这样:
public void createInitialLayout(IPageLayout layout) {
layout.setEditorAreaVisible(false);
layout.setFixed(false);
layout.addStandaloneView(NavigationView.ID, false, IPageLayout.LEFT, 0.7f, layout.getEditorArea());
right = layout.createFolder("right", IPageLayout.RIGHT, 0.3f, "com.my.app.views.browser.navigation");
layout.getViewLayout(WallpaperView.Id).setCloseable(false);//dummy view to keep the folder from closing
layout.getViewLayout(WallpaperView.Id).setMoveable(false);
right.addView(WallpaperView.Id);
//add some placeholders for the potential views
right.addPlaceholder(DefaultAdminView.ID+":*");
}
我想根据用户在导航树中选择的内容打开不同的视图。 认为这不会很难。 我的导航树视图:
tree = new TreeViewer(composite);
tree.setContentProvider(new BrowserNavigationTreeContentProvider());
tree.setLabelProvider(new BrowserNavigationTreeLabelProvider());
tree.setInput(UserProfileAdvisor.getProject());
//register Mouselistener for doubleclick events
tree.addDoubleClickListener(new IDoubleClickListener(){
@Override
public void doubleClick(DoubleClickEvent event) {
TreeSelection ts = (TreeSelection) event.getSelection();
Object selectedItem = ts.getFirstElement();
String viewId = DefaultAdminView.ID;
//set viewId depending on the selectedItem.class
try {
PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().showView(viewId, String.valueOf(++viewCounter), IWorkbenchPage.VIEW_ACTIVATE);
} catch (PartInitException e) {
ILogHelper.error("The view for the selected object could not be opened", e);
}
}
});
这似乎工作正常。 只有一个小问题:我需要以某种方式将对象(让我们说selectedItem)传递给我的视图,以便让用户与其内容交互。 我怎么做?
我看到一些例子,其中一些同事写了一个自己的视图,放在右侧。 然后他们添加一个CTabFolder
,实例化视图并手动添加它们。 有更聪明的解决方案吗?
创建一个新的接口,给它一个像accept( Object parameter )
这样的方法,并让你的视图实现它。
然后,当你做PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().showView(viewId, String.valueOf(++viewCounter), IWorkbenchPage.VIEW_ACTIVATE)
的方法showView
返回IViewPart
。 将此返回值转换为您的接口并调用accept
方法。
使用SelectionService,请参阅Eclipse RCP让两个视图进行通信
在“导航”中实现SelectionProvider,并在打开的视图中,您可以从选择服务中请求所选对象(请参阅文章)
HTH汤姆
链接地址: http://www.djcxy.com/p/18671.html