2012-02-09 2 views
1

Я пытаюсь выполнить свои первые шаги с GWT/GIN.GWT - обязательная активностьMapper с GIN не работает

Я загрузил пример hellomvp из Google и последовал за этим tutorial, чтобы начать работу с 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-класса вызывается после нажатия на ссылку:

presenter.goTo(new GoodbyePlace(name)); 

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

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

ответ

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.

+0

ОК, я думаю, что это точка. Я не получил разницу между ActivityMapper и ActivityManager. Можете ли вы сказать мне, что лучше всего определить менеджера активности? – Lodger

+0

@Lodger Я обновил свой пост – jusio

+0

Другим вариантом, возможно, более тесно связанным с идеями использования Gin/Guice было бы определение провайдера или метода @Provides в модуле ActivityManager. Один из таких примеров из примера проекта gwt/gin https://github.com/niloc132/tvguide-sample-parent/blob/master/tvguide-client/src/main/java/com/acme/gwt/client/ioc/ TvGuideClientModule.java # L98 –

Смежные вопросы