将参数传递给视图

在我的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 Tom