본문 바로가기

빈 구멍 채우기

[Android][Hilt] Activity를 Injection하기

이슈

MainActivity에서 FragmentStateAdapter를 injection 하고자 한다. 그러기 위해서는 FragmentStateAdapter의 constructor의 parameter로 FragmentActivity를 넘겨줘야 한다.

 

참고

https://stackoverflow.com/a/62856164

 

Dagger with Hilt inject ActivityContext in adapter from module

I'm using dagger and hilt and i want to inject @ActivityContext from a module to an Adapter but i'm getting this error - ANTLR Tool version 4.5.3 used for code generation does not match the current

stackoverflow.com

 

해결

@Module
@InstallIn(ActivityComponent::class)
object ActivityModule {

    @Provides
    @ActivityScoped
    fun provideMyAdapter(@ActivityContext context: Context) =
        MyAdapter(context as FragmentActivity)

}

 

참고한 링크에서는 모듈에서 Adapter의 parameter를 수정없이 그대로 context로 넣는다. Adpater의 constructor 코드 안에 context를 FragmentActivity로 형변환해주던데, 나는 Module 단에서 형변환을 했다.

Injection을 하는 단계에서 parameter를 필요에 맞게 넣어주는 것까지도 Injection의 역할로 봐야하지 않을까 고민하고 작성했다.

 

앱 실행 시 잘 돌아간다.