Android RecyclerView中的两种对象类型,每个对象都有自己的ViewHolder
我正在尝试创建recyclerview,它显示来自单个对象(ObjectMaster)的两个不同数组的结果。我不太在乎顺序,只要两个数组都显示在列表中。如有任何意见或建议,将不胜感激 模型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
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();
}