Jos*_*hRT 2 android dagger dagger-2
我正在努力思考Dagger 2,但遇到了一种情况,我不太确定如何正确解决。我用来dagger.android设置subcomponents每个活动和片段,其中每个子组件都有一个具有自己的依赖项的演示者。
问题是一个片段应该显示从网络获取的信息,因此我将 a 传递URL给片段以告诉它要显示什么。但我不确定如何Dagger解决对片段加载的依赖。我以为我需要一个subcomponent builder,但这显然是多余的,因为编译器消息告诉我它需要来自URL一个Provides方法。我还为 设立了一个限定符,URL并用它注释了片段中的一个方法。我以为Dagger可以捡起来,但我错了。有人可以告诉我如何最好地处理这种情况吗?
如果我没记错的话,您正在尝试提供通过 提供的url依赖项。在这种情况下,添加将作为参数的方法。当实例存在时,它会自动满足。FragmentBundleProvidesModuleFragmentFragmentgraph
分段:
@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);
}
}
Run Code Online (Sandbox Code Playgroud)
模块:
@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;
}
}
Run Code Online (Sandbox Code Playgroud)
当您注入时,url它将DetailFragment转到provideUrl方法并满足DetailFragment,它将url从Bundle.
这对我有用。:)
| 归档时间: |
|
| 查看次数: |
1189 次 |
| 最近记录: |