我可以在activity中注入依赖项并且工作正常,但是在fragment中调用同一依赖项却无法访问。
以下是我的操作:
App.Java
public class App extends MultiDexApplication implements HasActivityInjector, HasFragmentInjector {
@Inject
DispatchingAndroidInjector<Activity> activityInjector;
@Inject
DispatchingAndroidInjector<Fragment> fragmentInjector;
private AppComponent mComponent;
@Override
public void onCreate() {
super.onCreate();
mComponent = DaggerAppComponent.builder().application(this).build();
mComponent.inject(this);
}
@Override
public DispatchingAndroidInjector<Activity> activityInjector() {
return activityInjector;
}
@Override
public AndroidInjector<Fragment> fragmentInjector() {
return fragmentInjector;
}
}
这是AppComponent.Java。
@Singleton
@Component(modules = { AndroidInjectionModule.class, 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();
}
}
这是ActivityModule.Java类
@Module
public abstract class ActivityModule {
@ContributesAndroidInjector
abstract MainActivity contributeMainActivityInjector();
@ContributesAndroidInjector
abstract MyActivity contributeCampaignActivityInjector();
}
以下是 FragmentModule.java 类:
@Module
public abstract class FragmentModule {
@ContributesAndroidInjector
abstract MyFragment bindMyFragment();
}
现在,在我的MyFragment类中,我想要注入这个依赖项。在类的顶部,我添加了以下行:
@Inject
ImageDownloaderApi imageDownloaderApi;
然后,在onCreateView函数中检查,我这样检查我的依赖项是否正常工作:
boolean injected = imageDownloaderApi == null ? false : true;
Log.d(this.getClass().getSimpleName(), "Dependency worked: "+ String.valueOf(injected));
每次都返回false。
而在活动中相同的代码可以正常工作。 还有一件事,我在活动中像下面这样在onCreate之后添加了这一行:
@Override
protected void onCreate(Bundle savedInstanceState) {
AndroidInjection.inject(this); // this line
super.onCreate(savedInstanceState);
当尝试在片段的onCreateView方法中添加相同的行时
AndroidInjection.inject(this);
下方有红色线,如果我使用getActivity替换这个,会出现运行时错误。
请检查并指导我哪里出错了?
我对Fragment的处理方式是否正确?因为在活动中它明显是有效的。
提前感谢您的时间。
public AndroidInjector<Fragment> supportFragmentInjector()
方法,以便它返回有效的注入器? - nyarian