У меня есть три вида деятельности, которые связаны наследством.
Только одно из этих действий использует инъекцию фрагмента.
Два действия требуют инъекции активности Dagger 2. Третье занятие не требует инъекций.
Вот мои действия:
/**
* Needs activity injection.
*/
class ThirdActivity extends SecondActivity
{
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
// calls the super, which will call AndroidInjection.inject(this);
// ... other code not shown
}
}
/**
* This activity requires fragment injection
*/
class SecondActivity extends FirstActivity
{
@Inject
DispatchingAndroidInjector<Fragment> fragmentInjector;
@Override
public AndroidInjector<Fragment> supportFragmentInjector()
{
return fragmentInjector;
}
@Override
protected void onCreate(Bundle savedInstanceState)
{
AndroidInjection.inject(this);
super.onCreate(savedInstanceState);
}
}
/**
* Does not use injection.
*/
class FirstActivity extends Activity
{
// no injection required
}
Вот мои модули Dagger 2
@Module
abstract class AppModule
{
@ActivityScope
@ContributesAndroidInjector(modules = {ThirdActivityModule.class, SecondActivityModule.class})
abstract ThirdActivity contributeThirdActivityInjector();
@ActivityScope
@ContributesAndroidInjector(modules = {SecondActivityModule.class})
abstract SecondActivity contributeSecondActivityInjector();
}
@Module
abstract class SecondActivityModule
{
@Binds
abstract Activity bindActivity(SecondActivity secondActivity);
@FragmentScope
@ContributesAndroidInjector(modules = {MyFragmentModule.class})
abstract MyFragment contributeMyFragmentInjector();
}
@Module
public abstract class ThirdActivityModule
{
@Binds
abstract Activity bindActivity(ThirdActivity thirdActivity);
}
@Module
abstract class MyFragmentModule
{
@Binds
abstract Fragment bindFragment(MyFragment mFragment);
}
Я получаю ошибку:
Note: Recompile with -Xlint:unchecked for details.
/dagger/AppComponent.java:45: error: [Dagger/MissingBinding]
[dagger.android.AndroidInjector.inject(T)]
com.example.SecondActivity cannot be provided without an @Inject constructor or an @Provides-annotated method.
This type supports members injection but cannot be implicitly provided.
Я думаю, что это может быть потому, что я включил SecondActivityModule
и ThirdActivityModule
в вызов contributesThirdActivityInjector()
, но я не уверен.
Буду признателен за любую помощь / совет с введением активности / фрагмента в случае наследования.