0

So I'm trying to migrate my whole app from dagger to hilt and apparently I'm unable to inject activities and fragments.

My Activities:

@AndroidEntryPoint()
class MainActivity : AuthorizedFlowActivity<ActivityMainBinding>(), MainActivityUiEventHandler,
MainActivityBottomSheetBehavior,
MainActivityOpenDrawer {

My fragments:

@AndroidEntryPoint
class ProfileFragment : BaseFragment<FragmentCaptainProfileBinding>() {

My Application Class:

@HiltAndroidApp
class App : Application() {

Injecting my activities like this:

class SplashActivityNavigatorImpl @Inject constructor(
    splashActivity: SplashActivity,
    private val preferences: JameelPreferences
)

And it's throwing this error:

error: [Dagger/MissingBinding] com.abc.presentation.main.activities.MainActivity cannot be provided without an @Inject constructor or an @Provides-annotated method. This type supports members injection but cannot be implicitly provided.

Project Level Gradle:

    classpath "com.google.dagger:hilt-android-gradle-plugin:$libVersion.hiltVersion"

App Level Gradle (all 3 modules):

id("dagger.hilt.android.plugin")        

implementation "com.google.dagger:hilt-android:$libVersion.hiltVersion"
kapt "com.google.dagger:hilt-android-compiler:$libVersion.hiltCompilerVersion"

Could it be that my activities and fragments are extending bases which cannot be annotated by the @AndroidEntryPoint because they have type parameters?? HELP!

Also with dagger2, I was using interfaces like:

@Module
abstract class AppActivitiesInjector {

    @ActivityScope
    @ContributesAndroidInjector(modules = [RiderInviteFriendFragmentsInjector::class, RiderInviteActivityModule::class, BaseActivityModule::class])
    abstract fun provideRiderInviteFriendActivity(): RiderInviteFriendActivity

    @ActivityScope
    @ContributesAndroidInjector(modules = [OffersActivityFragmentsInjector::class, OffersActivityModule::class, BaseActivityModule::class])
    abstract fun provideOffersActivity(): OffersActivity

    @ActivityScope
    @ContributesAndroidInjector(modules = [TripsHistoryActivityFragmentsInjector::class, TripsHistoryActivityModule::class, BaseActivityModule::class])
    abstract fun provideTripsActivity(): TripsHistoryActivity

    @ActivityScope
    @ContributesAndroidInjector(modules = [RiderProfileActivityFragmentsInjector::class, RiderProfileActivityModule::class, BaseActivityModule::class])
    abstract fun provideRiderProfileActivity(): RiderProfileActivity

    @ActivityScope
    @ContributesAndroidInjector(modules = [PaymentActivityModule::class, PaymentActivityFragmentsInjector::class, BaseActivityModule::class])
    abstract fun providePaymentActivity(): PaymentActivity
}

And it was working, but hilt is supposedly to reduce such boiler plate? right?

Thanks

Mohsin Falak
  • 429
  • 6
  • 22

1 Answers1

0

As the error says: There is nothing that supports providing the activities and fragments. The Entry point annotations means just: "inject here". So dagger will generate everything to support "what needs to be injected in the fragments and activities". You need to provide somehow the activity. Try checking these answers:

Provide Activity instance with Hilt

How to Bind/Provide Activity or Fragment with Hilt?

Yavor Mitev
  • 1,363
  • 1
  • 10
  • 22