RecyclerView的适配器的使用

本文详细介绍了Android中RecyclerView的使用方法,包括添加依赖、设置样式、创建适配器及ViewHolder等关键步骤,并提供了多类型项的适配器实现示例。

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

在使用一款全新的控件的时候,得先了解这款控件的背景,我就不一一介绍了。


在使用RecyclerView的时候先添加依赖:compile 'com.android.support:recyclerview-v7:25.0.0'



添加完依赖之后,在activity中设置RecyclerView的样式。(样式一共分为三种  )

//设置recyclerView的样式这是列表
rcl.setLayoutManager(new LinearLayoutManager(SecondActivity.this,LinearLayoutManager.VERTICAL,false));

这里就需要到了设配器。recyclerView的适配器和原来我们所使用的listview的适配器还是有一定的区别的


继承的时候一定要    public class MyRecyclerViewAdapter extends RecyclerView.Adapter<>  这么继承,<>这里面


一般是指泛型,在这里是要得到我们的ViewHolder。  viewHolder可以自己定义然后添加进去如下


public class MyViewHolder extends RecyclerView.ViewHolder

上面的泛型就可以使用<MyRecyclerViewAdapter.MyViewHolder>  类名点类名!    然后会提示生成三个方法


public int getItemCount()
public void onBindViewHolder(MyViewHolder holder, int position)
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType)

三个方法第一个是指和listview一样有多少条数据

        第二个方法是指和myViewHolder绑定,在这个方法下给控件赋值
         
        第三个方法是得到布局的View,并且设置给viewholder。

当以上书写完毕后就添加适配器,下面是完整代码:
public class MyRecyclerViewAdapter extends RecyclerView.Adapter<MyRecyclerViewAdapter.MyViewHolder> {
 private   List<Data.DataBean> list;
    private Context context;

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

    @Override
    public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view=View.inflate(context, R.layout.item,null);
        MyViewHolder viewHolder=new MyViewHolder(view);
        return viewHolder;
    }

    @Override
    public void onBindViewHolder(MyViewHolder holder, int position) {
             holder.jieshao.setText(list.get(position).getIntroduction());
        holder.name.setText(list.get(position).getTitle());
        holder.year.setText(list.get(position).getUserAge()+"");
        holder.zhiye.setText(list.get(position).getOccupation());
        Glide.with(context).load(list.get(position).getUserImg()).into(holder.iv);
    }
    @Override
    public int getItemCount() {
        return list.size();
    }
    public class MyViewHolder extends RecyclerView.ViewHolder{

        private  ImageView iv;
        private  TextView jieshao;
        private  TextView name;
        private  TextView year;
        private  TextView zhiye;
        public MyViewHolder(View itemView) {
            super(itemView);
            iv = (ImageView) itemView.findViewById(R.id.item_iv);
            jieshao = (TextView) itemView.findViewById(R.id.item_tv_jieshao);
            name = (TextView) itemView.findViewById(R.id.item_tv_name);
            year = (TextView) itemView.findViewById(R.id.item_tv_year);
            zhiye = (TextView) itemView.findViewById(R.id.item_tv_zhi);

        }
    }

}

,上面我们提到了适配器的单形态,如果在数据中遇到了多条目的类型。我们的适配器应该这么写{

public class MyRecyclerAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
    private Context context;
    private LayoutInflater mLayoutInflater;
    private User.DataBean data;
    private List<String> list=new ArrayList<>();
     //定义枚举类来定义两个类型
    public enum ITEM_TYPE{
        ITEM1,
        ITEM2
    }

    public MyRecyclerAdapter(Context context, User.DataBean data) {
        this.context = context;

        this.data = data;
        this.mLayoutInflater = mLayoutInflater.from(context);
    }

    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType){
       //加载item view的时候根据不同的TYPE加载不同的布局
        if(viewType==ITEM_TYPE.ITEM1.ordinal()){
          return new item1ViewHolder(mLayoutInflater.inflate(R.layout.item1,parent,false));
        }else {
            return new item2ViewHolder(mLayoutInflater.inflate(R.layout.item2,parent,false));
        }
    }
    @Override
    public void onBindViewHolder(final RecyclerView.ViewHolder holder, int position) {
        if(holder instanceof item1ViewHolder){
            Glide.with(context).load(data.getAd5().get(position).getImage()).into(((item1ViewHolder) holder).iv1);
            ((item1ViewHolder) holder).tv1.setText(data.getAd5().get(0).getTitle());
            Glide.with(context).load(data.getAd5().get(position+1).getImage()).into(((item1ViewHolder) holder).iv2);
            ((item1ViewHolder) holder).tv2.setText(data.getAd5().get(1).getTitle());
            Glide.with(context).load(data.getAd5().get(2).getImage()).into(((item1ViewHolder) holder).iv3);
            ((item1ViewHolder) holder).tv3.setText(data.getAd5().get(2).getTitle());
            Glide.with(context).load(data.getAd5().get(3).getImage()).into(((item1ViewHolder) holder).iv4);
            ((item1ViewHolder) holder).tv4.setText(data.getAd5().get(3).getTitle());
             ((item1ViewHolder) holder).iv1.setOnClickListener(new View.OnClickListener() {
                 @Override
                 public void onClick(View v) {
                      Intent intent=new Intent(context,ShouYeActivity.class);
                      intent.putExtra("title2",data.getAd5().get(0).getTitle());
                      intent.putExtra("data",data.getAd5().get(0).getAd_type_dynamic_data());
                     context.startActivity(intent);
                 }
             });
            ((item1ViewHolder) holder).iv2.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Intent intent=new Intent(context,ShouYeActivity.class);
                    intent.putExtra("title2",data.getAd5().get(1).getTitle());
                    intent.putExtra("data",data.getAd5().get(1).getAd_type_dynamic_data());
                    context.startActivity(intent);
                }
            });
            ((item1ViewHolder) holder).iv3.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Intent intent=new Intent(context,ShouYeActivity.class);
                    intent.putExtra("title2",data.getAd5().get(2).getTitle());
                    intent.putExtra("data",data.getAd5().get(2).getAd_type_dynamic_data());
                    context.startActivity(intent);
                }
            });
            ((item1ViewHolder) holder).iv4.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Intent intent=new Intent(context,ShouYeActivity.class);
                    intent.putExtra("title2",data.getAd5().get(3).getTitle());
                    intent.putExtra("data",data.getAd5().get(3).getAd_type_dynamic_data());
                    context.startActivity(intent);
                }
            });

            for (int i=0;i<data.getAd1().size();i++){
                list.add(data.getAd1().get(i).getImage());
            }
            ((item1ViewHolder) holder).xBanner.setData(list,null);
            ((item1ViewHolder) holder).xBanner.setmAdapter(new XBanner.XBannerAdapter() {
                @Override
                public void loadBanner(XBanner banner, View view, int position) {
                    Glide.with(context).load(list.get(position)).into((ImageView) view);
                }
            });
            // 设置XBanner的页面切换特效
            ((item1ViewHolder) holder).xBanner.setPageTransformer(Transformer.Default);
            // 设置XBanner页面切换的时间,即动画时长
            ((item1ViewHolder) holder).xBanner.setPageChangeDuration(1000);
                 ((item1ViewHolder) holder).xBanner.setOnItemClickListener(new XBanner.OnItemClickListener() {
                     @Override
                     public void onItemClick(XBanner banner, int position) {
                         Intent intent=new Intent(context, ShouYeActivity.class);
                         intent.putExtra("pager",data.getAd1().get(position).getAd_type_dynamic_data());
                         Log.i("xxx",data.getAd1().get(position).getTitle());
                         intent.putExtra("title",data.getAd1().get(position).getTitle());
                         context.startActivity(intent);
                     }
                 });
        }else if(holder instanceof item2ViewHolder){

            //设置布局的样式
            ((item2ViewHolder) holder).item2_recycler.setLayoutManager(new LinearLayoutManager(context,LinearLayoutManager.VERTICAL,false));
            Item2RecyclerView irv=new Item2RecyclerView(context,data);
            ((item2ViewHolder) holder).item2_recycler.setAdapter(irv);
        }
    }

    @Override
    public int getItemCount() {
        return 2;
    }

    @Override
    public int getItemViewType(int position) {
        if(position==0){
            return ITEM_TYPE.ITEM1.ordinal();

        }else if(position==1){
            return  ITEM_TYPE.ITEM2.ordinal();

        }
        return ITEM_TYPE.ITEM2.ordinal();
    }
    public static class item1ViewHolder extends  RecyclerView.ViewHolder {
         ImageView iv1;
        ImageView iv2;
        ImageView iv3;
         ImageView iv4;
         TextView tv1;
         TextView tv2;
         TextView tv3;
         TextView tv4;
         XBanner xBanner;

        public item1ViewHolder(View itemView) {
            super(itemView);
            iv1 = (ImageView) itemView.findViewById(R.id.item1_iv1);
            iv2 = (ImageView) itemView.findViewById(R.id.item1_iv2);
            iv3 = (ImageView) itemView.findViewById(R.id.item1_iv3);
            iv4 = (ImageView) itemView.findViewById(R.id.item1_iv4);
            tv1 = (TextView) itemView.findViewById(R.id.item1_tv1);
            tv2 = (TextView) itemView.findViewById(R.id.item1_tv2);
            tv3 = (TextView) itemView.findViewById(R.id.item1_tv3);
            tv4 = (TextView) itemView.findViewById(R.id.item1_tv4);
            xBanner = (XBanner) itemView.findViewById(R.id.item1_viewpager);
        }
    }
    public static class item2ViewHolder extends  RecyclerView.ViewHolder {

         RecyclerView item2_recycler;

        public item2ViewHolder(View itemView) {
            super(itemView);
            item2_recycler = (RecyclerView) itemView.findViewById(R.id.item2_recyclerView);
        }
    }

}
}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值