2017-08-27 12 views
1

私は新しいdagger.android注入機能を使用していましたが、これまで私は本当に楽しんでいました。Recagler ViewアダプタにDaggerを注入することは可能ですか?2.11

しかし、私はこの小さな問題に遭遇しました。それによって、私が使用しているアダプターまたは基本的に非活動のクラスを注入することは不可能に思えます。

コンストラクタは@Injectより簡単ですが、コンストラクタを介して私のrecyclerviewにデータを渡しているので、これは私のオプションではありません。

これは、クラスを挿入するためにコンポーネントを呼び出す必要があることを意味します。このようになりますAppComponentクラスで

interface AppComponent : AndroidInjector<App> { 

    @Component.Builder 
    abstract class Builder { 
     abstract fun networkModule(networkModule: NetworkModule): Builder 
    } 

    fun inject(someClass SomeClass) 

} 

言った後.inject()方法を認識しないDaggerAppComponentを生成DaggerAppComponent.builder().build()

これはのように思えるので、私は明らかにダガーについて何かを誤解していますクラスを注入する正規の方法。

私はAndroidInjectorから拡張していると思われますが、この場合、どのように非活動性クラスを注入するのですか。私がそのクラスのために@Subcomponentを作ったとしても、まだ呼び出す必要がありますDaggerAppComponent

+0

この記事を読んでいたのは、この記事https:// blogです。 davidmedenjak.com/android/2017/11/11/dagger-rules-engagement.htmlそして私がアダプタを注入することができなかったという前提を放棄してください。もちろん、記事のように - 私はコピーして貼り付けていましたが、私がその機能を知らないコードを貼り付けていました。アイテムを保持していたアダプタにパブリック変数を追加した後、コンストラクタに渡すことをやめ、必要な依存関係を手間をかけずに注入することができました。ただし、ビュー・モデルにアダプタを注入する必要もあります。 – nmu

答えて

0

これは味の問題です(さらに完全なコードデザイン)が、私はあなたがこれをやっているとは思わない正しい方法。

"私はコンストラクタを介して私のrecyclerlerviewにデータを渡しています"とはどういう意味ですか?アダプターには、recyclerview自体ではなく、データを割り当てます。

あなたは(おそらく必要があります)このようなものになりますどこかで、その後、RCVとそれを表示するからMVPのアプローチ、データをロードするという目標を使用しない場合:アンドロイド短剣については

class TestFragment : Fragment() { 

    val recyclerView: RecyclerView by bind(R.id.recyclerview) // Custom view binding but whatever 
    val adapter: TestAdapter? = null 

    override fun onCreateView(inflater: LayoutInflater?, container: ViewGroup?, savedInstanceState: Bundle?): View? { 
     val view = inflater!!.inflate(R.layout.test, container, false) 

     // Initialize 
     recyclerView.layoutManager = LinearLayoutManager(context, LinearLayoutManager.HORIZONTAL, false) 
     adapter = TestAdapter(mutableListOf()) 
     recyclerView.adapter = adapter 

     // Add data 
     adapter.addItem(MyClass("Hey it's working")) 

     return view 
    } 
} 

を、私はそれを実際には普通の短剣よりも役に立たない。物事はさらに複雑になります。

アンドロイド用のMVPを強くお勧めします。ここに私のサンプルがあります。アクティビティやコンポーネントを必要とせず、依存関係を一切注入する必要はありません。MVP sample

+0

はい私はあなたのように、アダプタのコンストラクタにデータを渡すことを意味しました。 '私は' List 'を注入していないので、' @Iject'できません。そして、私はMVVMを使用していますので、それが私の依存関係を注入する理由の全体です。 – nmu

+2

これは質問に対する回答ではありません –

関連する問題