1

GWT/GIN で最初のステップを実行しようとしています。

Google から hellomvp の例をダウンロードし、このチュートリアルに従ってgin を使い始めました。

私の問題は、HelloGinModule-class の configure-method の次の行に関するものです。

bind(ActivityMapper.class).to(AppActivityMapper.class).in(Singleton.class);

私の観点では、クラス「AppActivityMapper」をアクティブなActivityManagerとしてバインドする必要があります。しかし実際には、クラス コンストラクター (またはクラスの任意のメソッド) が呼び出されることはないため、発生したイベントはキャッチされません。

クラス 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 を使用するアクティビティ マネージャーはどこで作成しますか? 更新

最も論理的なことは、アクティビティ マネージャーをジンから遠ざけることです。たとえば、ジンジェクターには次のメソッドがあります。

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 に答える