1

我正在尝试使用 GWT/GIN 迈出第一步。

我已经从 google 下载了 hellomvp 示例,并按照本教程开始使用 gin。

我的问题是关于 HelloGinModule 类的配置方法中的这一行:

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)); 

事件被触发到事件总线。但什么也没有发生。

提前致谢

4

1 回答 1

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 类可能会更好(这样你就可以将东西注入它的构造函数)。另一种解决方案是使用@ProvidesActivityManager 来初始化。

于 2012-02-09T13:53:22.593 回答