我有一个通过 "extensions" 创建的两个视图的透视图。第一个视图有一个表,第二个视图有一个树。我只想在应用程序打开时显示第一个视图,当用户从表中选择一个项目时,将此项目名称放在第二个视图的文本字段中,并在第二个视图打开时隐藏第一个视图。我想要当用户按下按钮时,还隐藏第二个视图并显示第一个视图。那可能吗?。
我已经设法将项目名称放在第二个视图中,但我无法协调显示和隐藏视图。
我有一个通过 "extensions" 创建的两个视图的透视图。第一个视图有一个表,第二个视图有一个树。我只想在应用程序打开时显示第一个视图,当用户从表中选择一个项目时,将此项目名称放在第二个视图的文本字段中,并在第二个视图打开时隐藏第一个视图。我想要当用户按下按钮时,还隐藏第二个视图并显示第一个视图。那可能吗?。
我已经设法将项目名称放在第二个视图中,但我无法协调显示和隐藏视图。
是的,可以显示和隐藏视图。
1) 每个视图都必须有一个唯一的 ID。此 ID 必须与 plugin.xml 的视图扩展中的 id 匹配。
这是我的 plugin.xml 视图扩展之一。
<view
class="gov.bop.rabid.ui.views.PrefetchView"
icon="icons/folder_user.png"
id="gov.bop.rabid.ui.views.PrefetchView"
name="Prefetch"
restorable="true">
</view>
这是PrefetchView
.
public static final String ID = "gov.bop.rabid.ui.views.PrefetchView";
通常,我将 ID 设置为与类名相同。这对我来说不那么混乱。
2)在Perspective
类中,createInitialLayout
方法中,你必须定义一个带有占位符的 IFolderLayout。同样,这是我的代码。
IFolderLayout consoleFolder = layout.createFolder(CONSOLE_ID,
IPageLayout.BOTTOM, 0.75f, editorArea);
consoleFolder.addPlaceholder(PrefetchedInmatesView.ID);
consoleFolder.addPlaceholder(FoundInmatesView.ID);
consoleFolder.addView(ProcessedInmatesView.ID);
setClosable(layout, FoundInmatesView.ID, false);
setClosable(layout, PrefetchedInmatesView.ID, false);
setClosable(layout, ProcessedInmatesView.ID, false);
3)您需要一个静态方法,允许您从任何其他视图中访问任何视图。我把这个静态方法放在我的Activator
课堂上,但你可以把它放在任何你想要的地方。
public static IViewPart getView(IWorkbenchWindow window, String viewId) {
IViewReference[] refs = window.getActivePage().getViewReferences();
for (IViewReference viewReference : refs) {
if (viewReference.getId().equals(viewId)) {
return viewReference.getView(true);
}
}
return null;
}
4) 最后,您在事件代码中显示和隐藏视图。这是一个例子。
final PhotoView view = (PhotoView) RabidPlugin.getView(window,
PhotoView.ID);
if (view == null)
return;
*** Do stuff with the other view ***
IWorkbenchPage page = window.getActivePage();
page.hideView(page.findView(FoundInmatesView.ID));