recyclerView多布局,多种不同类型数据合并处理

对于常见的多布局,我们可以设置不同的type,例如 getItemViewType方法:


if (mDatas.get(position).getType() ==1) {

     return   1;

} else if (mDatas.get(position).getType() ==2) {    

     return    2;

}

onCreateViewHolder方法

if (viewType == 1) {

/*显示服务的item项*/ view = LayoutInflater.from(mContext).inflate(R.layout.a,  parent ,   false);

return new AHolder(view);

} else if (viewType == 2) {

/*显示服务title项*/ view =     LayoutInflater.from(mContext).inflate(R.layout.b, parent, false);

return new BHolder(view);

onBindViewHolder方法同理

if (getItemViewType(position) == 1) {

((AHolder) holder).aTextview.setText("a");

}else{

}(( BHolder ) holder).aTextview.setText(“b”);

对于如果不同的viewType加载的list类型都不同,例如A类型需要的是Adata,类型B需要的是Bdata,一个list无法传递过来,我们需要把Adata和Bdata都继承Cdata,然后在Cdata中设置一个Type,添加不同数据类型时候设置不同type,传入判断当前type是A类型的数据还是B类型数据,强转不同数据类型加载数据

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要实现 RecyclerView 多种布局,可以通过重写 getItemViewType 方法,根据不同的数据类型返回不同的布局类型,然后在 onCreateViewHolder 方法中根据 viewType 加载不同的布局文件,最后在 onBindViewHolder 方法中根据数据类型绑定数据到不同的 ViewHolder 上。 代码示例: ``` public class MyAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> { private List<Object> mDataList; // 枚举不同的布局类型 private static final int TYPE_ONE = 1; private static final int TYPE_TWO = 2; public MyAdapter(List<Object> dataList) { mDataList = dataList; } @Override public int getItemViewType(int position) { if (mDataList.get(position) instanceof TypeOneBean) { return TYPE_ONE; } else if (mDataList.get(position) instanceof TypeTwoBean) { return TYPE_TWO; } return super.getItemViewType(position); } @Override public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { switch (viewType) { case TYPE_ONE: View view1 = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_type_one, parent, false); return new TypeOneViewHolder(view1); case TYPE_TWO: View view2 = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_type_two, parent, false); return new TypeTwoViewHolder(view2); default: throw new IllegalArgumentException("invalid viewType"); } } @Override public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { Object data = mDataList.get(position); if (holder instanceof TypeOneViewHolder) { // 绑定 TypeOneViewHolder 的数据 ((TypeOneViewHolder) holder).bindData((TypeOneBean) data); } else if (holder instanceof TypeTwoViewHolder) { // 绑定 TypeTwoViewHolder 的数据 ((TypeTwoViewHolder) holder).bindData((TypeTwoBean) data); } } @Override public int getItemCount() { return mDataList.size(); } static class TypeOneViewHolder extends RecyclerView.ViewHolder { public TypeOneViewHolder(View itemView) { super(itemView); // 初始化 TypeOneViewHolder 的控件 } public void bindData(TypeOneBean data) { // 绑定 TypeOneViewHolder 的数据 } } static class TypeTwoViewHolder extends RecyclerView.ViewHolder { public TypeTwoViewHolder(View itemView) { super(itemView); // 初始化 TypeTwoViewHolder 的控件 } public void bindData(TypeTwoBean data) { // 绑定 TypeTwoViewHolder 的数据 } } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值