我是匕首和刀柄的新手,我正在尝试使用 Hilt 使用构建器将我的适配器注入到我的片段中(片段实际上是在片段寻呼机适配器中,因此它和适配器有多个实例),看起来设置正确,我在 onCreate 中的 super 之前构建了组件,但是当稍后尝试在片段中访问它时适配器为空,我想知道以后是否需要以某种方式提供它,例如我的片段中有我的适配器
@AndroidEntryPoint
public class CardHolderFragment extends Fragment {
public CardAdapter cardAdapter;
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
DaggerCardAdapterComponent.builder()
.cardAdapterDependencies(() -> layoutIdentifier)
.build().inject(this);
super.onCreate(savedInstanceState);
cardAdapter.notifyDataSetChanged(); // CardAdapter.notifyDataSetChanged()' on a null object reference
所以我的问题是如果组件设置正确应该可以工作还是我错过了一个步骤?我想做的是像 cardAdapter = DaggerCardAdapterComponent.getCardAdapter 但我不能在组件中放置提供方法,我在这里查看了匕首迁移指南,这对我来说有点复杂,因为我只有几个星期在切换到刀柄之前用匕首,但指南提到
最后,如果针对不同的活动或片段组件进行了不同的配置,您可能必须重新设计一些东西。例如,您可以在活动上使用新接口来提供对象。
所以我尝试了这个,这让我实现了接口,然后返回了一个卡适配器,但我不确定我应该在这里返回什么,欢迎任何帮助
这是我的卡适配器组件
@Component(dependencies = CardAdapterDependencies.class, modules = {TypeFactoryModule.class,
ItemTouchListenerModule.class, GlideModule.class})
public interface CardAdapterComponent {
void inject(CardHolderFragment cardHolderFragment);
@Component.Builder
interface Builder {
Builder cardAdapterDependencies(CardAdapterDependencies cardAdapterDependencies);
CardAdapterComponent build();
}
interface HasCardAdapter{
CardAdapter getCardAdapter();
}
}
这是我的卡适配器构造函数
@Inject
public CardAdapter(
ItemTouchListener onItemTouchListener,
String layoutIdentifier,
TypeFactory typeFactory,
RequestManager glide
) {
this.onItemTouchListener = onItemTouchListener;
this.typeFactory = typeFactory;
this.layoutIdentifier = layoutIdentifier;
this.glide = glide;
this.elements = new ArrayList<>();
}