gpt4 book ai didi

android - RecyclerView 中的两种对象类型,每个对象类型都有自己的 ViewHolder

转载 作者:行者123 更新时间:2023-11-29 15:50:41 25 4
gpt4 key购买 nike

我正在尝试创建 recyclerview,它显示来自一个对象 (ObjectMaster) 的两个不同数组的结果。我不太关心顺序,只要两个数组都显示在列表中即可。任何想法或建议将不胜感激。

型号

public ObjectMaster {
List<Object1> first_objects;
List<Object2> second_objects;
}

适配器

public class ObjectMasterAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {

private ObjectMaster object;
private static final int TYPE_OBJECT1 = 0;
private static final int TYPE_OBJECT2 = 1;

public ObjectMasterAdapter(ObjectMaster object) {
this.object = object;
}

public class Object1Holder extends RecyclerView.ViewHolder {
private TextView title;
private TextView subtitle;

public Object1Holder(View itemView) {
super(itemView);
title = (TextView) itemView.findViewById(R.id.title);
subtitle = (TextView) itemView.findViewById(R.id.subtitle);
}
public void bindObj(Object1 object) {
title.setText(object.getTitle());
subtitle.setText(object.getSubtitle());
}
}
public class Object2Holder extends RecyclerView.ViewHolder {
private TextView title;

public Object2Holder(View itemView) {
super(itemView);
title = (TextView) itemView.findViewById(R.id.title);
}
public void bindObj(Object2 object) {
title.setText(object.getTitle());
}
}

@Override
public int getItemViewType(int position) {

// I need to figure out the best way to determine if its already listed objects from the first object array (Object1)
}

@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {

View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.object_item, viewGroup, false);
switch(i) {
case TYPE_OBJECT1: return new Object1Holder(view);
case TYPE_OBJECT2: return new Object2Holder(view);
}
return null;
}

public void onBindViewHolder(RecyclerView.ViewHolder viewHolder, int i) {

switch (viewHolder.getItemViewType()) {
case TYPE_OBJECT1:
Object1Holder object1 = (Object1Holder) viewHolder;
object1.bindObj(object.first_objects.get(i));
break;

case TYPE_OBJECT2:
Object2Holder object2 = (Object2Holder) viewHolder;
object2.bindObj(object.second_objects.get(i));
break;
}
}

@Override
public int getItemCount() {
return object.first_objects.size() + object.second_objects.size();
}

最佳答案

I need to figure out the best way to determine if its already listed objects from the first object array (Object1)

如果 position 大于(或等于)第一个数组的长度,您现在进入第二个数组。从 position 中减去第一个数组的长度,得到第二个数组的索引。

另请注意,您在 onBindViewHolder() 中有一个错误,因为您没有执行类似的减法来更改 position(i value) 到第二个数组的索引中,当它是您正在处理的第二个数组的 View 类型时。

关于android - RecyclerView 中的两种对象类型,每个对象类型都有自己的 ViewHolder,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30157347/

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