【发布时间】:2018-11-29 10:17:09
【问题描述】:
我能够在活动中注入依赖关系并且它工作正常。但是在片段中调用相同的依赖项并没有访问权限。
这就是我所做的。
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));
而且它每次都返回错误。
相同的代码在活动中起作用。 我在活动中做的另一件事是像这样在 onCreate 下面添加这一行
@Override
protected void onCreate(Bundle savedInstanceState) {
AndroidInjection.inject(this); // this line
super.onCreate(savedInstanceState);
尝试在片段的 onCreateView 中添加同一行时
AndroidInjection.inject(this);
它在此下方显示红线。如果我用 getActivity 替换它。它给了我运行时错误。
请看一下并指导我哪里错了?
我为片段做的过程是否正确?因为它显然在活动中发挥作用。
提前感谢您的宝贵时间。
【问题讨论】:
标签: java android android-fragments dependency-injection dagger-2