在Eclipse RCP中显示视图时传递参数
我正在创建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) { ... }
StudentReviewView:
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());
}
它将学生证打印为空。
我错过了明显的东西吗?
谢谢!
平台在通过activePage.showView(viewIdToOpen)
打开视图时调用createPartControl
。 所以不要在createPartControl
上填充你的字段。 当setStudentId
时执行此setStudentId
。
这里是很好的链接试试这个..
http://tomsondev.bestsolution.at/2011/02/07/enhanced-rcp-how-views-can-communicate-the-e4-way/
我也遇到过这个问题。 通过重新包装需要更新的特定视图组件找到解决方法。 这是一个设置字符串的概念证明:
安装人员界面:
public interface ViewSetter {
void setMessage(String message);
}
被初始化的视图:
//view that implements ViewSetter
@Override
public void createPartControl(Composite parent) {
label = new Label(parent, SWT.NONE); //label is a field
}
@Override
public void setMessage(final String message) {
Display.getDefault().syncExec(new Runnable() {
@Override
public void run() {
label.setText(message);
label.pack(true);
}
});
}
创建和初始化视图的代码:
IViewPart view = page.showView(viewID);
ViewSetter viewSetter = (ViewSetter)view;
viewSetter.setMessage("Hello World");
链接地址: http://www.djcxy.com/p/3081.html