我正在尝试使用GWT / GIN执行我的第一步。
我已经从谷歌下载了hellomvp示例,并按照此tutorial开始使用杜松子酒。
我的问题是关于HelloGinModule类的configure-method中的这一行:
bind(ActivityMapper.class).to(AppActivityMapper.class).in(Singleton.class);
在我看来,它应该将我的类“AppActivityMapper”绑定为活动的ActityManager。 但实际上从不调用类构造函数(或类的任何方法),因此不会捕获触发的事件。
AppActivityMapper类看起来像这样:
public class AppActivityMapper implements ActivityMapper {
Provider<HelloActivity> helloActivityProvider;
Provider<GoodbyeActivity> goodbyeActivityProvider;
@Inject
public AppActivityMapper(final Provider<HelloActivity> helloActivityProvider, final Provider<GoodbyeActivity> goodbyeActivityProvider) {
this.helloActivityProvider = helloActivityProvider;
this.goodbyeActivityProvider = goodbyeActivityProvider;
}
@Override
public Activity getActivity(Place place) {
if (place instanceof HelloPlace) {
return helloActivityProvider.get();
} else if (place instanceof GoodbyePlace) {
return goodbyeActivityProvider.get();
}
return null;
}
}
在我的示例中,单击链接后调用View-Class中的代码:
presenter.goTo(new GoodbyePlace(name));
事件被发送到事件总线。但没有任何反应。
提前致谢
答案 0 :(得分:1)
您已在GIN中的某处定义了活动映射器。但是必须在活动管理器中使用活动映射器。您在哪里创建将使用AppActivityMapper的活动管理器? 的更新强>:
最合乎逻辑的是让活动经理远离杜松子酒。例如。在你的ginjector你将有一个方法:
interface MyInjector extends Ginjector {
... //other methods
ActivityMapper getActivityMapper();
}
然后,当您创建ginjector实例时,您可以创建一个管理器并将正确的活动映射器放入其中。例如:
MyInjector injector = GWT.create(MyInjector.class);
ActivityManager manager = new ActivityManager(injector.getActivityMapper(), injector.getEventBus());
如果您有多个管理器和映射器,可能最好扩展ActivityManager类(这样您就可以将东西注入其构造函数中)。另一种解决方案是使用@Provides
初始化ActivityManager。