在使用一款全新的控件的时候,得先了解这款控件的背景,我就不一一介绍了。
在使用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); } } }}