Sam*_*yak 4 android android-fragments dagger dagger-2
我正在开发一个 android 项目并使用 Dagger2 进行依赖注入?我正在尝试将 Fragment 注入到 Activity 中,但我不想使用 newInstance或new SomeFragment创建片段实例,并且希望该实例由 dagger 创建并注入。
我也想知道如果想传递一些参数,我该怎么做。
即使您不想调用new,Android 也会: 这就是为什么要求 Fragment 具有零参数公共构造函数的原因,因为如果您从包中恢复 FragmentActivity,Android 将反射性地调用 Fragment 构造函数。
因此,你创建的大多数 Fragment 不应该声明它们自己的构造函数,当然也不应该有一个@Inject带参数的带注释的构造函数:只要有一个零参数的公共构造函数,Android 就不会抱怨,但 Dagger 不会参与以这种方式创建您的 Fragment,如果有两种不相关的方式来创建您的 Fragment,它将降低您阅读和理解您的代码的能力。
相反,您可以使用newInstance在 Bundle 中设置参数来创建 Fragment 实例,然后您可以在Fragment#onCreate. 如果您没有要传递的任何参数,则可以new显式调用,但这newInstance可能是一个很好的一致实践,因此如果 Fragment 接受参数,则更改较少。
要在 Fragment 实例中获取 Dagger 提供的依赖项,标准做法是 [callAndroidInjection.inject(this)或AndroidSupportInjection.inject(this)in onAttach,如dagger.android 文档中关于注入 Fragment 的内容。执行此操作的简单方法是从 DaggerFragment 继承,但也欢迎您自己这样做。为了找到一个组件来注入你的 Fragment,AndroidSupportInjection 将递归地检查父层次结构中扩展 HasSupportFragmentInjector 的 Fragment,然后将尝试 Activity,然后是应用程序;如果您使用带有 ContributesAndroidInjector 的 dagger.android 标准设计,Dagger 将为您的 Fragment 创建一个子组件实例,允许您引入 Fragment 范围的依赖项。
| 归档时间: |
|
| 查看次数: |
1277 次 |
| 最近记录: |