RecyclerView的适配器的使用

来源:互联网 发布:西游记唐僧知乎 编辑:程序博客网 时间:2024/05/19 03:25

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


在使用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);        }    }}
}



0 0