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

Android RecyclerView中的两种对象类型,每个对象都有自己的ViewHolder,android,android-recyclerview,Android,Android Recyclerview,我正在尝试创建recyclerview,它显示来自单个对象(ObjectMaster)的两个不同数组的结果。我不太在乎顺序,只要两个数组都显示在列表中。如有任何意见或建议,将不胜感激 模型 public ObjectMaster{ 列出第一个对象; 列出第二个对象; } 适配器 公共类ObjectMasterAdapter扩展了RecyclerView.Adapter{ 私有对象主对象; 私有静态final int TYPE_OBJECT1=0; 私有静态final int TYPE_OBJE

我正在尝试创建recyclerview,它显示来自单个对象(ObjectMaster)的两个不同数组的结果。我不太在乎顺序,只要两个数组都显示在列表中。如有任何意见或建议,将不胜感激

模型
public ObjectMaster{
列出第一个对象;
列出第二个对象;
}
适配器
公共类ObjectMasterAdapter扩展了RecyclerView.Adapter{
私有对象主对象;
私有静态final int TYPE_OBJECT1=0;
私有静态final int TYPE_OBJECT2=1;
公共ObjectMasterAdapter(ObjectMaster对象){
this.object=对象;
}
公共类Object1Holder扩展了RecyclerView.ViewHolder{
私有文本视图标题;
私有文本视图字幕;
公共对象1持有者(视图项视图){
超级(项目视图);
title=(TextView)itemView.findViewById(R.id.title);
subtitle=(TextView)itemView.findViewById(R.id.subtitle);
}
public void bindObj(Object1对象){
title.setText(object.getTitle());
subtitle.setText(object.getSubtitle());
}
}
公共类Object2Holder扩展了RecyclerView.ViewHolder{
私有文本视图标题;
公共对象2持有者(视图项视图){
超级(项目视图);
title=(TextView)itemView.findViewById(R.id.title);
}
public void bindObj(Object2对象){
title.setText(object.getTitle());
}
}
@凌驾
public int getItemViewType(int位置){
//我需要找出最好的方法来确定它是否已经从第一个对象数组(Object1)中列出了对象
}
@凌驾
public RecyclerView.ViewHolder onCreateViewHolder(视图组视图组,int i){
View View=LayoutInflater.from(viewGroup.getContext()).flate(R.layout.object_项,viewGroup,false);
开关(一){
案例类型_OBJECT1:返回新的OBJECT1持有者(视图);
案例类型_OBJECT2:返回新的Object2Holder(视图);
}
返回null;
}
BindViewHolder上的公共无效(RecyclerView.ViewHolder ViewHolder,int i){
开关(viewHolder.getItemViewType()){
案例类型_OBJECT1:
Object1Holder object1=(Object1Holder)viewHolder;
object1.bindObj(object.first_objects.get(i));
打破
案例类型2:
Object2Holder object2=(Object2Holder)viewHolder;
object2.bindObj(object.second_objects.get(i));
打破
}
}
@凌驾
public int getItemCount(){
返回object.first_objects.size()+object.second_objects.size();
}
我需要找出最好的方法来确定它是否已经从第一个对象数组(Object1)中列出了对象

如果
位置
大于(或等于)第一个数组的长度,则现在进入第二个数组。从
位置
中减去第一个数组的长度,将索引放入第二个数组

还要注意的是,
onBindViewHolder()
中有一个错误,即当您正在处理的是第二个数组的视图类型时,您没有执行类似的减法来将
位置
i
值)更改为第二个数组的索引

我需要找出最好的方法来确定它是否已经从第一个对象数组(Object1)中列出了对象

如果
位置
大于(或等于)第一个数组的长度,则现在进入第二个数组。从
位置
中减去第一个数组的长度,将索引放入第二个数组


还要注意的是,
onBindViewHolder()
中有一个错误,因为您没有执行类似的减法来更改
位置(
i
值)当您正在处理的是第二个数组的视图类型时,将索引插入到第二个数组中。

谢谢@commonware,您是对的,只需在第二个数组上获取索引开始时减去第一个数组的大小即可。它现在正按预期工作。@commonware:我面临一个相关问题……您能帮助我吗让我回答我的问题吗?谢谢@commonware,你说得对,在第二个数组上开始索引时,只需减去第一个数组的大小。现在工作正常。@commonware:我面临一个相关的问题……你能帮我解答我的问题吗?
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();
 }