匕首2绑定相同的片段两次?

时间:2018-02-09 08:30:34

标签: android android-fragments dagger-2

嗨我有一个模块绑定同一个类的两个Frgaments,但是每一个都有一个参数传递给它来表示同一个片段的两个不同状态。

下面是我的模块,它将包含我的依赖项的另一个子模块绑定到片段中:

@Module
abstract class ProductAndroidBinding{
    /**
     * Activity bindings here
     */


    /**
     * Fragment Bindings here
     */

    @ContributesAndroidInjector(modules = [ProductModule ::class])
    @ViewScope
    abstract fun bindProductHomeFragment() : OffersHomeFragment

    @ContributesAndroidInjector(modules = [ProductModule ::class])
    @ViewScope
    @Named("OldProducts")
    abstract fun binOldListFragment() : ProductsListFragment

    @ContributesAndroidInjector(modules = [ProductModule ::class])
    @ViewScope
    @Named("NewReleasedProducts")
    abstract fun binNewProductsListFragment() : ProductsListFragment


}

我收到以下错误:

Error:(22, 2) error: @ContributesAndroidInjector methods cannot have qualifiers
    @javax.inject.Named(value = "NewReleasedProducts")
    ^

我认为使用命名注释可以绑定多个变体?

1 个答案:

答案 0 :(得分:0)

@ContributesAndroidInjector可以方便地生成一个子组件,用于注入片段,但不会直接添加到对象图中。因此,没有可以添加的限定符(截至目前)。

  

但每个都有一个参数传递给它来表示同一个片段的两个不同状态

我建议你简单地将这个参数绑定到Dagger。从模块中提供它,然后用它做你需要的。

@Module
abstract class ProductAndroidBinding{

  /**
   * Fragment Bindings here
   */

  @ContributesAndroidInjector(modules = [ProductModule::class])
  @ViewScope
  abstract fun binOldListFragment() : ProductsListFragment

}

...并提供/使用它......

@Module class ProductModule {

  @Named("my_arg")
  @Provides provideParameter(fragment: ProductListFragment) : String {
    return fragment.arguments.getString("my_arg")
  }

  // then use it, e.g.
  @Provides providePresenter(@Named("my_arg") arg: String) : MyPresenter {
    return if(arg == "old") OldPresenter() else NewPresenter()
  }  

}