XRecyclerview多条目+Banner轮播图的adapter

本文介绍了如何使用XRecyclerView库来处理包含多种条目类型的数据,并实现Banner轮播图功能。首先,文章讲解了XRecyclerView的依赖引入,接着详细阐述了如何在Adapter中处理不同类型的视图,最后讨论了设置Banner轮播图的步骤和关键代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

依赖:

implementation 'com.jcodecraeer:xrecyclerview:1.5.9'
//部分版本问题需要导入此依赖
implementation 'com.android.support:design:27.1.1'
//轮播图
implementation 'com.youth.banner:banner:1.4.9'
implementation 'com.nostra13.universalimageloader:universal-image-loader:1.9.5'
implementation 'com.github.bumptech.glide:glide:3.7.0'
implementation 'com.squareup.okhttp3:okhttp:3.11.0'
implementation 'com.google.code.gson:gson:2.8.5'
//项目要求圆形图片展示
implementation 'com.facebook.fresco.helper:fresco-helper:2.1.0'
package com.example.jiangxi.nigthwork.adapter;

import android.content.Context;
import android.support.annotation.NonNull;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;

import com.bumptech.glide.Glide;
import com.example.jiangxi.nigthwork.R;
import com.example.jiangxi.nigthwork.bean.GoodsBean;

import com.example.jiangxi.nigthwork.util.MyBanner;


import com.facebook.drawee.view.SimpleDraweeView;
import com.youth.banner.Banner;

import java.util.ArrayList;
import java.util.List;

public class MyAdapter extends RecyclerView.Adapter{
    //图片地址
    private String url1 = "http://d.5857.com/wmgf_160811/001.jpg";
    private String url2 = "http://d.5857.com/wmgf_160811/002.jpg";
    private String url3 = "http://d.5857.com/wmgf_160811/003.jpg";
    //存放图片的集合
    List<String> list1 = new ArrayList<>();
    //定义四种类型
    public static final int TYPE_ONE = 0;
    public static final int TYPE_TWO = 1;
    public static final int TYPE_THREE = 2;
    public static final int TYPE_FOUR = 3;

    
    private Context context;
    private List<GoodsBean.DataBean> list;


    public MyAdapter(Context context, List<GoodsBean.DataBean> list) {
        this.context = context;
        this.list = list;
    }

    @NonNull
    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View view;
        if (viewType == TYPE_ONE) {
            view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item, null);
            return new ViewHolder(view);
        } else if (viewType == TYPE_TWO) {
            view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item2, null);
            return new TypeTwoHolder(view);
        }else if (viewType == TYPE_THREE){
            view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item3,null);
            return new TypeThreeHolder(view);
        }else {
            view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item4,null);
            return new TypeFourHolder(view);

        }

    }





    @Override
    public int getItemViewType(int position) {
        //按照项目要求条目一显示为三个图片,条目二为轮播图,条目三和条目四按规律往下循环
        //下标为偶数且下标不能为0
        if (position%2 == 0 && position !=0){
            return TYPE_FOUR;
        //下标为奇数且下标不能为1
        }else if (position%2  == 1 && position != 1){
            return TYPE_THREE;
        //条目一
        }else if (position == 0){
            return TYPE_ONE;
        //条目二
        }else if (position == 1){
            return TYPE_TWO;
        }


        return super.getItemViewType(position);
    }

    @Override
    public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {

        //获得下标类型
        int itemViewType = getItemViewType(position);
        switch (itemViewType){
            case TYPE_ONE:
                ViewHolder holder1 = (ViewHolder) holder;
//                Glide.with(context).load(list.get(position).getImages().split("\\|")[0]).into(holder1.iv1);
//                Glide.with(context).load(list.get(position).getImages().split("\\|")[0]).into(holder1.iv2);
//                Glide.with(context).load(list.get(position).getImages().split("\\|")[0]).into(holder1.iv3);

                ((ViewHolder) holder).iv1.setImageURI(list.get(position).getImages().split("\\|")[0]);
                ((ViewHolder) holder).iv2.setImageURI(list.get(position).getImages().split("\\|")[1]);
                ((ViewHolder) holder).iv3.setImageURI(list.get(position).getImages().split("\\|")[2]);

                break;

            case TYPE_TWO:
                TypeTwoHolder holder2 = (TypeTwoHolder) holder;
                list1.add(url1);
                list1.add(url2);
                list1.add(url3);
                holder2.banner.setImageLoader(new MyBanner());
                holder2.banner.setImages(list1);
                holder2.banner.start();
                break;

            case TYPE_THREE:
                TypeThreeHolder holder3 = (TypeThreeHolder) holder;
//                Glide.with(context).load(list.get(position).getImages().split("\\|")[0]).into(holder3.it3Iv1);
//                Glide.with(context).load(list.get(position).getImages().split("\\|")[0]).into(holder3.it3Iv2);
                holder3.it3Iv1.setImageURI(list.get(position).getImages().split("\\|")[2]);
                holder3.it3Iv2.setImageURI(list.get(position).getImages().split("\\|")[2]);

                holder3.it3Tv1.setText(list.get(position).getTitle());
                break;
            case TYPE_FOUR:
                TypeFourHolder holder4 = (TypeFourHolder) holder;
                Glide.with(context).load(list.get(position).getImages().split("\\|")[2]).into(holder4.it4Iv1);
                holder4.it4Tv.setText(list.get(position).getTitle());
                break;



        }


    }

    @Override
    public int getItemCount() {
        return list.size();
    }
    //每一个类型对应一个Holder
    public class ViewHolder extends RecyclerView.ViewHolder {

       SimpleDraweeView iv1;
       SimpleDraweeView iv2;
       SimpleDraweeView iv3;

        public ViewHolder(View itemView) {
            super(itemView);
            iv1 = itemView.findViewById(R.id.iv1);
            iv2 = itemView.findViewById(R.id.iv2);
            iv3 = itemView.findViewById(R.id.iv3);
        }
    }


    class TypeTwoHolder extends RecyclerView.ViewHolder {
        Banner banner;


        public TypeTwoHolder(View itemView) {
            super(itemView);
            banner = itemView.findViewById(R.id.banner);
        }
    }

    class TypeThreeHolder extends RecyclerView.ViewHolder {
        SimpleDraweeView it3Iv1 ;
        TextView it3Tv1;
        SimpleDraweeView it3Iv2;

        public TypeThreeHolder(View itemView) {
            super(itemView);
            it3Iv1 = itemView.findViewById(R.id.item3_iv1);
            it3Iv2 = itemView.findViewById(R.id.item3_iv2);
            it3Tv1 = itemView.findViewById(R.id.item3_tv1);


        }
    }

    class TypeFourHolder extends RecyclerView.ViewHolder {
        ImageView it4Iv1;
        TextView it4Tv;


        public TypeFourHolder(View itemView) {
            super(itemView);
            it4Iv1 = itemView.findViewById(R.id.item4_iv1);
            it4Tv = itemView.findViewById(R.id.item4_tv);

        }
    }


}

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值