AndroidInjection.inject(this)
を使用して、コンポーネントをアクティビティに挿入しています。
AndroidInjection
には、Android.app.Fragment
をパラメーターとして受け取るオーバーロードメソッドもあります。しかし、私のフラグメントはAndroid.support.v4.app.Fragment
を拡張しており、対応するメソッドはありません。
質問:フラグメントがAndroid.support.v4.app.Fragment
を拡張する場合の注入の使用方法
サポートライブラリフラグメントについては、サポートインジェクションを使用する必要があります。ここにいくつかの例があります:
@Singleton
@Component(modules = {
AndroidSupportInjectionModule.class, // Important
ActivityModule.class,
FragmentModule.class
})
public interface AppComponent extends AndroidInjector<App> {
void inject(App app);
@Component.Builder
interface Builder {
@BindsInstance
Builder application(Application application);
AppComponent build();
}
}
アプリケーション、たとえば Multidex実装 が必要な場合は、DaggerApplicationまたは単純なHasSomeIjectionを使用できます。
public class App extends MultiDexApplication implements
HasActivityInjector,
HasFragmentInjector {
@Inject DispatchingAndroidInjector<Activity> activityInjector;
@Inject DispatchingAndroidInjector<Fragment> fragmentInjector;
private AppComponent mComponent;
@Override
public void onCreate() {
mComponent = DaggerAppComponent.builder().application(this).build();
mComponent.inject(this);
}
// Dependency Injection
@Override
public DispatchingAndroidInjector<Activity> activityInjector() {
return activityInjector;
}
@Override
public DispatchingAndroidInjector<Fragment> fragmentInjector() {
return fragmentInjector;
}
}
次のモジュール:
@Module
public abstract class FragmentModule {
@ContributesAndroidInjector
abstract ContactsFragment bindContactsFragment();
}
活動モジュール:
@Module
public abstract class ActivityModule {
@ContributesAndroidInjector
abstract ContactsActivity bindContactsActivity();
}
そしてフラグメント:
import com.some.ContactsPresenter;
import dagger.Android.support.DaggerFragment;
public class ContactsFragment extends DaggerFragment {
@Inject
ContactsPresenter mContactsPresenter;
// .....
}
DaggerFragmentを使用したくない場合は、その実装を開き、必要な変更を加えてフラグメントにコピーできます。ここでの主な機能は、AndroidSupportInjectionModuleの使用です。これがあなたを助けることを願っています