【已解决】 Recycleview 多种条目类型 如何绑定数据
听了老师的课,课里面的不同类型对应的layout 是写死的,怎么把数据传到里面去呢
老师讲的时候
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position)
这段就直接跳过了
首先是onCreateView
@NonNull
@Override
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
if(viewType==TYPE_1){
view = View.inflate(parent.getContext(), R.layout.type1,null);
return new Type1Holder(view);
}else{
view = View.inflate(parent.getContext(), R.layout.type2,null);
return new Type1Holder(view);
}
}
//要建立多种类型的holder
public class Type1Holder extends RecyclerView.ViewHolder {
private int mPostion;
private final ImageView mImage;
public Type1Holder(@NonNull View itemView) {
super(itemView);
mImage = itemView.findViewById(R.id.imageView);
}
public void setData(MoreTypeBean moreTypeBean, int position) {
this.mPostion = position;
mImage.setImageResource(moreTypeBean.pic);
}
}
public class Type2Holder extends RecyclerView.ViewHolder{
private int mPostion;
private final ImageView mImage;
public Type2Holder(@NonNull View itemView) {
super(itemView);
mImage = itemView.findViewById(R.id.imageView);
}
public void setData(MoreTypeBean moreTypeBean, int position) {
this.mPostion=position ;
mImage.setImageResource(moreTypeBean.pic);
}
}
我现在有了两个innerholder,然后就不知道怎么绑定了
@Override
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
holder.setData(mData.get(position),position);
}
然后setData 就报错,找不到是具体哪个holder了
求教,谢谢
不是有position嘛?
调用getType(position不就可以得到类型了吗)。
holder内部根据类型findView,这样子就可以找开对应控件的view了,赋值。
这么简单都想不来么?呜呜。
假设你的数据是一个集合。就像我们的首页一下。有3张图片的item,有1张图片的item,没有图片的item.type则根据每个item的图片来判断。type也有了,数据也有了,在onBindViewHolder里设置即可。
如果你有多个集合保存不同类型的数据,把index转换一下即可从不同的集合中拿出数据设置。一般来说,你从后台请求回来的数据是同一个集合,所以应该是前面那种。
同一个集合,不同的类型,后台返回的数据有标记量的。
比如说我们的首页类型有:分享、文章、问答