传递参数给视图

问题描述:

在我的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方法。

+0

好老访问者模式! – 2011-02-15 14:57:24

+0

这正是我期待的!但是,如何将IViewPart实例转换为接口? – yat0 2014-12-29 16:48:21

使用的SelectionService,请参阅Eclipse RCP let two views communicate

落实SelectionProvider在“导航”,并在打开的视图中,您可以要求从选择服务选择的对象(见文章)

HTH汤姆