【发布时间】:2026-02-04 16:00:02
【问题描述】:
我正在使用 Dagger 2.11 的 @ContributesAndroidInjector。
以下来源可以正常工作。@ActivityScope 也可以正常工作。
class MainActivity : AppCompatActivity(), HasFragmentInjector {
@Inject
lateinit var androidInjector: DispatchingAndroidInjector<Fragment>
override fun fragmentInjector() = androidInjector
@Inject
lateinit var fragment: MainFragment
@Inject
lateinit var viewModel: MainViewModel
override fun onCreate(savedInstanceState: Bundle?) {
AndroidInjection.inject(this)
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
fragmentManager.beginTransaction()
.replace(R.id.container, fragment)
.commitAllowingStateLoss()
viewModel.start("activity")
}
}
class MainFragment @Inject constructor() : Fragment() {
@Inject
lateinit var viewModel: MainViewModel
override fun onCreateView(inflater: LayoutInflater?, container: ViewGroup?, savedInstanceState: Bundle?): View? {
val view = inflater!!.inflate(R.layout.fragment_main, container, false)
return view
}
override fun onAttach(context: Context?) {
super.onAttach(context)
viewModel.start("fragment")
}
}
@Module
abstract class AndroidModule {
@ActivityScope
@ContributesAndroidInjector
abstract fun contributeMainActivity(): MainActivity
}
@ActivityScope
class MainViewModel @Inject constructor() {
...
但是当我阅读document时,
我觉得使用@ConstructsAndroidInjector 和活动是正确的。
而且在答案here中,也写成
public class MainActivity {
@Inject CoffeeFragment coffeeFragment; //no! don't do this
@Inject TeaFragment teaFragment; //no!
我的实现有问题吗?
我的实施会出现什么问题?
【问题讨论】:
标签: android android-fragments kotlin dagger-2 dagger