当您
AndroidSupportInjection.inject(this)从中注入时
HomeFragment,Dagger将遍历父片段层次结构以找到实现的人
HasSupportFragmentInjector。要使其工作,请使您的
MainActivity扩展
DaggerAppCompatActivity实现
HasSupportFragmentInjector。
从文档
AndroidSupportInjection.inject(Fragment fragment):
如果可以找到关联的{@link
dagger.android.AndroidInjector}实现,则注入{@prefragment},否则抛出{@link
IllegalArgumentException}。使用以下算法找到合适的{@pre AndroidInjector}来注入{@prefragment}:
- 遍历父片段层次结构以找到实现{@link HasSupportFragmentInjector}的片段,如果没有,则执行
- 如果实现了{@link HasSupportFragmentInjector},则使用{@prefragment}的{@link
Fragment#getActivity()活动},否则执行- 如果实现了{@link HasSupportFragmentInjector},则使用{@link
android.app.Application}。如果它们都不实现{@link HasSupportFragmentInjector},则抛出{@link
IllegalArgumentException}。如果没有父片段,活动或应用程序没有实现{@link HasSupportFragmentInjector},则@throws
IllegalArgumentException。
有了这个,匕首将使用
@FragmentScope@ContributesAndroidInjectorabstract HomeFragment provideHomeFragment();
从你的
MainActivityModule内心注入
HomeFragment。



