Android Activity Inheritance with Dagger 2

Kelvin Watson
1 min readNov 23, 2020

--

Setting up Dagger 2 injection for inheritance situations with Android activities or fragments can be a pain. This article explains it simply with an example.

Suppose you have a BaseActivity that you need to extend. Let’s call the extending class SubClassedActivity.

Steps

First, contribute the android injector for the subclassed activity.

@Module
abstract class UiModule {

@[ActivityScope ContributesAndroidInjector(modules = [SubClassedActivityModule::class])]
abstract fun contributeSubClassedActivityInjector(): SubClassedActivity
}

Define the baseActivityModule.

@Module
abstract class BaseActivityModule {
@Binds
abstract fun bindBaseActivity(instance: BaseActivity): FragmentActivity
}

Install the BaseActivityModulein the SubClassedActivityModule.

@Module(includes = [BaseActivityModule::class])
abstract class SubClassedActivityModule {

@Binds
abstract fun bindSubClassedActivity(instance: SubClassedActivity): BaseActivity

Now, let’s define the BaseActivity.

abstract class BaseActivity : Activity(), HasAndroidInjector {
@Inject
lateinit var fragmentInjector: DispatchingAndroidInjector<Any>

override fun androidInjector(): AndroidInjector<Any> = fragmentInjector

override fun onCreate(savedInstanceState: Bundle?) {
AndroidInjection.inject(this)
super.onCreate(savedInstanceState)
...
}

Finally, define the SubClassedActivity.

class SubClassedActivity : BaseActivity() {
// no need to call AndroidInjector.inject(this)
}

Please consider supporting me so I can bring you more content:

Sign up to discover human stories that deepen your understanding of the world.

Free

Distraction-free reading. No ads.

Organize your knowledge with lists and highlights.

Tell your story. Find your audience.

Membership

Read member-only stories

Support writers you read most

Earn money for your writing

Listen to audio narrations

Read offline with the Medium app

--

--

Kelvin Watson
Kelvin Watson

No responses yet

Write a response