私は頭を包み込むように取り組んでいDagger 2
ますが、適切に解決する方法がよくわからないという状況に遭遇しました。私は自分のアクティビティとフラグメントのそれぞれdagger.android
を設定するsubcomponents
ために使用しています。各サブコンポーネントには、独自の依存関係を持つプレゼンターがあります。
問題は、1つのフラグメントがWebからフェッチされた情報を表示する必要があることです。そのためURL
、フラグメントにを渡して、何を表示するかを指示します。しかしDagger
、フラグメントのロードへの依存を解決する方法がわかりません。subcomponent builder
が必要だと思いましたが、コンパイラメッセージがメソッドURL
からの必要があると言っているので、それは明らかに冗長Provides
です。また、の修飾子を設定しURL
、フラグメント内のメソッドにアノテーションを付けました。私Dagger
はそれを拾うかもしれないと思ったが、私は間違っていた。誰かが私にこの状況を最もよく処理する方法についてのアイデアを与えることができますか?
私が間違っていない場合はurl
、Fragment
を介して提供される依存関係を提供しようとしていますBundle
。その場合、パラメータとして受け取るProvides
メソッドを追加します。インスタンス上で、それは自動的に満足させます。Module
Fragment
Fragment
graph
断片:
@Inject
String url;
public static DetailFragment newInstance() {
Bundle args = new Bundle();
args.putString("url", "http://stackoverflow.com/");
DetailFragment fragment = new DetailFragment();
fragment.setArguments(args);
return fragment;
}
@Override
public void onAttach(Context context) {
AndroidSupportInjection.inject(this);
super.onAttach(context);
printInfo();
}
public void printInfo(){
if (url == null) {
Log.i(TAG, "Url is null");
}else {
Log.i(TAG, "Url: " + url);
}
}
モジュール:
@Module
public class DetailFragmentModule {
@Provides
String provideUrl(DetailFragment detailFragment){
Bundle bundle = detailFragment.getArguments();
String url = bundle.getString("url");
return url;
}
@Provides
DetailFragmentView provideDetailFragmentView(DetailFragment detailFragment){
return detailFragment;
}
}
あなたが注入url
しDetailFragment
ているので、それはprovideUrl
メソッドに行き、満足しDetailFragment
、そしてそれはurl
から戻りBundle
ます。
これは私のために働いた。:)
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加