我试图在片段中注入Dagger 2.11 Retrofit,但我无法注射,
1)问题是AndroidInjection.inject(this)需要DaggerFragment,我无法将BaseFragment更改为DaggerFragment对象,因为它会在替换片段时导致问题
2)我也很难与匕首架构混淆,因为我已经看到了许多匕首2.11或更高版本的演示代码,他们正在为每个活动创建模块。所以我需要为每个活动创建单独的模块和组件
open class BaseFragment : Fragment()
class HomeFragment : BaseFragment() {
@Inject
lateinit var retrofit: Retrofit
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
}
override fun onAttach(context: Context?) {
AndroidInjection.inject(activity)
super.onAttach(context)
}
override fun onAttach(activity: Activity?) {
AndroidInjection.inject(this)
super.onAttach(activity)
}
override fun onCreateView(inflater: LayoutInflater?, container: ViewGroup?, savedInstanceState: Bundle?): View {
println("----Retrofit----"+retrofit.baseUrl())
return inflater!!.inflate(R.layout.fragment_home, container, false)
}
}
答案 0 :(得分:0)
您可以在片段的OnAttach方法中使用 AndroidSupportInjection.inject(this)而不是AndroidInjection.inject(activity)。
现在看起来应该是
override fun onAttach(context: Context?) {
AndroidSupportInjection.inject(this)
super.onAttach(context)
}