gpt4 book ai didi

java - 无法在 Java Android 中使用 dagger2 在 fragment 中注入(inject)依赖项

转载 作者:搜寻专家 更新时间:2023-11-01 08:19:14 24 4
gpt4 key购买 nike

我能够在 Activity 中注入(inject)依赖性并且它工作正常。但是在 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)该依赖项。在最上面,我在类中添加了这些行

@Inject
ImageDownloaderApi imageDownloaderApi;

然后检查 onCreateView 函数,我这样做是为了检查我的依赖项是否像这样工作

boolean injected = imageDownloaderApi == null ? false : true;
Log.d(this.getClass().getSimpleName(), "Dependency worked: "+ String.valueOf(injected));

它每次都返回 false。

相同的代码在 Activity 中起作用的地方。我在 Activity 中做的另一件事是像这样在 onCreate 下面添加这一行

  @Override
protected void onCreate(Bundle savedInstanceState) {
AndroidInjection.inject(this); // this line
super.onCreate(savedInstanceState);

当试图在 fragment 的 onCreateView 中添加相同的行时

AndroidInjection.inject(this);    

下面是红线。如果我用 getActivity 替换它。它给了我运行时错误。

请看一下并指导我哪里错了?

我为 fragment 所做的过程是否正确?因为它显然在 Activity 中起作用。

提前感谢您的宝贵时间。

最佳答案

我假设您正在使用支持库中的 Fragment-s。尝试将 public class App extends MultiDexApplication implements HasActivityInjector, HasFragmentInjector 更改为 public class App extends MultiDexApplication implements HasActivityInjector, HasFragmentInjector, HasSupportFragmentInjector 并随后提供适当的注入(inject)器。

This is an easy article这使这个话题很清楚。此外,此处还介绍了HasSupportFragmentInjector 接口(interface)的使用。

关于java - 无法在 Java Android 中使用 dagger2 在 fragment 中注入(inject)依赖项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53536645/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com