我正在创建 Eclipse RCP 应用程序,并且在显示视图时被传递参数卡住了。作为第一种方法,我尝试从 View1 在 View2 中设置一个静态变量并打开该视图(如下所示)。有用。
IWorkbenchPage activePage = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();
String viewIdToClose = studentListView.ID;
IViewPart viewToClose = activePage.findView(viewIdToClose);
TableItem item = studentTable.getItem(studentTable.getSelectionIndex());
String text = item.getText(ListViewConstants.TABLE_COLUMN_ONE);
activePage.hideView(viewToClose);
try {
String viewIdToOpen = StudentReview.ID;
StudentReview.userId = text;
activePage.showView(viewIdToOpen);
} catch (PartInitException e) {...}
由于这似乎不是一个好方法,我按照以下链接中提到的建议进行了尝试(接受的答案)。 将参数传递给视图 。在这种方法中,我们只能在显示视图后传递参数。
但我遇到的问题是,在调用 showView() 时,要打开的视图应该具有选定行的值,即,我想根据视图 1 的选择填充视图 2 中的参数。有什么办法可以做到这一点?使用 PULL 代替 PUSH 方法好吗?任何建议表示赞赏。谢谢!!!
更新1:将参数传递给视图 接口中提到的方法:
public interface ICommunicationView extends IViewPart{
public void accept(Object parameter);
}
调用accept():
IWorkbenchPage activePage = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();
String viewIdToClose = StudentListView.ID;
IViewPart viewToClose = activePage.findView(viewIdToClose);
TableItem item = studentTable.getItem(studentTable.getSelectionIndex());
String text = item.getText(ListViewConstants.TABLE_COLUMN_ONE);
activePage.hideView(viewToClose);
try {
String viewIdToOpen = StudentReview.ID;
ICommunicationView viewToOpen = (ICommunicationView) activePage.showView(viewIdToOpen);
viewToOpen.accept(text);//Sending userId to Review view
} catch (PartInitException e) { ... }
学生评论查看:
private String studentId;
//getters and setters
@Override
public void accept(Object parameter) {
setStudentId(parameter.toString());
}
public void createPartControl(final Composite parent) {
...
System.out.println("Student Id" + this.getStudentId());
}
它将学生 ID 打印为空。
我错过了一些明显的东西吗?
谢谢!