gpt4 book ai didi

java - Dagger 2 注入(inject) RecyclerView 失败 - 成员无法注入(inject)原始类型

转载 作者:行者123 更新时间:2023-12-01 10:29:03 25 4
gpt4 key购买 nike

我有一个从 RecyclerView.Adapter 扩展的列表适配器。我尝试使用 Dagger 2 注入(inject)它,但失败并出现错误

Error:android.support.v7.widget.RecyclerView.Adapter has type parameters, cannot members inject the raw type. via:
ListAdapter

重要文件内容如下(已删除不相关行)

ListAdapter.java

public class ListAdapter extends RecyclerView.Adapter {
public ListAdapter(Context context) {
}

ListFragment.java

public class ListFragment extends Fragment {
@Inject
ListAdapter listAdapter
}

InjectionModule.java

@Module
public class InjectionModule {
@Provides
ListAdapter provideLisAdapter(Context context) {
return new ListAdapter(context);
}
}

InjectionComponent.java

@Component (modules = InjectionModule.class)
public interface InjectionComponent {
void inject(ListFragment listFragment);
}

我在谷歌上进行了广泛的搜索,发现this article我认为我有效地使用了文章中途提到的父类(super class)方法,但它对我不起作用。希望有人设法用 Dagger 2 注入(inject) RecyclerView.Adapter,如果是的话,可以分享解决方案。

最佳答案

替换

@Component (modules = InjectionModule.class)
public interface InjectionComponent {
void inject(ListAdapter listAdapter);
}

@Component (modules = InjectionModule.class)
public interface InjectionComponent {
void inject(ListFragment listFragment);
}

此外,为了在模块中构造 ListAdapter 对象,dagger 应该知道在哪里可以找到 Context 对象。您可以通过这样的构造函数在模块中传递上下文

@Module
public class InjectionModule {
Context context;
public InjectionModule(Context context) {
this.context = context;
}

@Provides
ListAdapter provideLisAdapter() {
return new ListAdapter(context);
}
}

然后在 ListFragment 中注入(inject)依赖项,如下所示:

DaggerInjectionComponent.builder()
.injectionModule(new InjectionModule(getActivity())
.build()
.inject(this);

关于java - Dagger 2 注入(inject) RecyclerView 失败 - 成员无法注入(inject)原始类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35196981/

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