I am using @ContributesAndroidInjector
of Dagger 2.11.
It works without problems with the following sources.
@ActivityScope
is also working.
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() {
...
But when I read the document,
I felt it was correct to use @ConstructsAndroidInjector
as well as activity.
And also in the answer here, it is written as
public class MainActivity {
@Inject CoffeeFragment coffeeFragment; //no! don't do this
@Inject TeaFragment teaFragment; //no!
Is my implementation problematic?
What problems will occur with my implementation?