GWT - привязка ActivityMapper с GIN не работает - PullRequest
1 голос
/ 09 февраля 2012

Я пытаюсь сделать свои первые шаги с GWT / GIN.

Я скачал пример hellomvp из Google и следовал этому учебнику , чтобы начать работу с gin.

Моя проблема связана с этой строкой в ​​методе configure класса 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)); 

Событие отправляется на шину событий. Но ничего не происходит.

Заранее спасибо

1 Ответ

1 голос
/ 09 февраля 2012

Вы определили маппер активности где-то в 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.

...