从另一个插件获取 RCP 中的 TreeViewer

Get TreeViewer in RCP from another Plugin

我正在为 Eclipse-RCP 开发插件。还有另一个带有 TreeViewer 的插件,我想从我的插件中 select 一个项目。我不知道如何访问它,这可能吗?

我认为可以通过以下方式获得正确的视图:

IViewReference home;
    IViewReference [] viewRefs = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().getViewReferences();
    for (int i = 0; i < viewRefs.length; i++) {
        if(viewRefs[i].getId()==myid){
            home = viewRefs[i];
            break;
        }
    }

但是 home 不是 TreeViewer,我无法投射它。我怎样才能得到 TreeViewer?

home.getTreeViewer() //Doesn't work cause of casting issues

我是 rcp 的新手,所以我很高兴得到一些解释。

您必须将 home 转换为其他视图的类型。然后就可以得到TreeViewer了。

您可以使用 IWorkbenchPage#findView(java.lang.String) 直接从您的活动 IWorkbenchPage 中找到 ViewPart。

如果您有想要 selected 的对象,获取视图的站点,获取站点的 selection 提供程序,然后告诉 selection 提供程序应该做什么被 selected(使用包含该对象的 StructuredSelection 实例)。这仅在树或部分中的任何内容(您不必关心或知道它是一棵树)实际上包含您告诉它的对象时才有效 select.

您需要使用以下方法找到您的视图:

IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();

IViewPart viewPart = page.findView("your view id");

然后您可以将视图部分转换为您的视图 class 并调用您在该视图上编写的方法 class:

if (viewPart != null) {
   MyViewClass myViewPart = (MyViewClass)viewPart;

   myViewPart.getTreeViewer();
}

其中 MyViewClass 是您的 ViewPart class。您将必须编写 getTreeViewer 方法。

如果视图当前未打开,您可以使用 showView:

viewPart = page.showView("your view id");