我有以下GWT课程:
public class MyDefaultView extends Composite {
// Uses UiBinder and just contains all the widgets for this view.
}
public class MyDefaultActivity extends AbstractActivity {
@Inject
private MyDefaultView myDefView;
@Override
public void start(AcceptsOneWidget panel, EventBus eventBus) {
panel.setWidget(myDefView);
}
}
public class MyActivityMapper implements ActivityMapper {
@Override
public Activity getActivity(Place place) {
if(place instanceof MyDefaultPlace)
return new MyDefaultActivity();
else
return null;
}
}
public class MyAppModule implements EntryPoint {
@Override
public void onModuleLoad() {
// Lots of initialization and wiring...
// Why do I need this?!?
MyDefaultView myDefaultView = GWT.create(MyDefaultView.class);
RootPanel.add(myDefaultView);
Place myDefaultPlace = GWT.create(MyDefaultPlace.class);
PlaceHistoryHandler historyHandler = getHistoryHandler();
historyHandler.register(myPlaceController, myEventBus, myDefaultPlace);
historyHandler.handleCurrentHistory();
}
}
MyDefaultView
添加到RootPanel
,如果我要打电话给PlaceHistoryHandler#handleCurrentHistory()
并在模块加载时显示MyDefaultView
?MyDefaultView
直接添加到RootPanel
,那么我应该添加什么?提前致谢!
答案 0 :(得分:0)
1)您无需添加MyDefaultView
,但需要一个实现AcceptsOneWidget
的面板,并在活动管理器上设置该面板。这将使您的观点变得可见。
2)在大多数应用程序中,您拥有始终可见的应用程序的一部分。例如,顶部的栏显示用户名等。需要将此类面板添加到根面板。在该面板中,您应该可以看到视图的位置,应该使用实现AcceptsOneWidget
的窗口小部件/面板。此小部件应通过setDisplay
设置为您的activityManager中的显示。该小部件将传递给您活动中的start
方法。以下是与ActivityManager和RootPanel一起使用的代码如下所示:
final ActivityManager activityManager = new ActivityManager(myActivityMapper, eventBus);
activityManager.setDisplay(rootView.getViewPanel());
Rootpanel.add(rootView);