前面一篇总结了ListView,在这篇我们总结一些这个RecyclerView,我们就从最基本的开始,安卓团队是将RecyclerView定义在support库当中的,因此想要使用RecyclerView这个控件,首先需要在项目的build.gradle中添加相应的依赖库才行。

下面是添加RecyclerView的相应库:(这里的v7:26.0.0-alphal按照自己相应的版本添加)

添加完后记得点击一下 Sysnc Now 来同步一下

它的基本的创建和添加到XML文件中我们就不在提了,这个比较简单,先看看要是想实现和前面我们写的ListView相同的效果,下面是最重要的适配器里面的代码,注释就是理解的思路,我们选择通篇复制:

/**
* Created by skotc on 2017/7/18.
*/
// 定义FruitAdapter类,这个类是继承自RecyclerView.Adapter
// public abstract static class Adapter<VH extends ViewHolder> 这句是我们看到的官方的关于Adapter的代码
// 从这句代码中你可以捕捉到的信息就是它的参数 VH 是一个继承自 ViewHolder 的,这也就是我们写ViewHolder必要 public class FruitAdapter extends RecyclerView.Adapter<FruitAdapter.ViewHolder> { //定义一个集合,用来接收这个FruitAdapter初始化之后传进来的数据 因为我们对数据的处理都是在这里进行
//包括对控件的赋值和告诉这个RecyclerView我们一共有多少条数据
private List<Fruit> mFruitList; //定义一个公共类ViewHolder是继承自RecyclerView.ViewHolder
public class ViewHolder extends RecyclerView.ViewHolder{ //由于它是继承自RecyclerView.ViewHolder,所以我们再初始化的时候是需要传入一个参数View
//这个View能帮助我们获取到RecyclerView子项我们定义的控件,所以我们在这里定义了下面两个控件,同样是用来接收他们
//接收的主要目的是在我们下面的方法里面给他们赋值
ImageView fruitImage;
TextView fruitText; // 为了点击事件定义的View
View fruitView;
// 这个ViewHolder类型的初始化以及参数和前面我们写的Adapter的道理相同,多看官方源码理解!
public ViewHolder(View view){ super(view);
// 这个我们自定义的fruitView接收view,这个View的参数就是RecyclerView子项的最外层的布局,我们可以在它上面就点击事件
fruitView = view;
// 这里就是获取两个控件
fruitImage = (ImageView) view.findViewById(R.id.fruit_image);
fruitText = (TextView) view.findViewById(R.id.fruit_name);
}
} //我们定义的FruitAdapter类的构造方法
public FruitAdapter(List<Fruit> fruitList ){ mFruitList = fruitList;
} //由于我们定义的FruitAdapter是继承RecyclerView.Adapter
//所以下面三个方法我们都要重写
@Override
public ViewHolder onCreateViewHolder ( ViewGroup parent , int viewType){ // 获取fruit_item的布局View
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.fruit_item,parent,false); // 再用这个View来初始化我们定义的ViewHolder类
final ViewHolder hoider = new ViewHolder(view); // 点击事件
hoider.fruitView.setOnClickListener(new View.OnClickListener(){ @Override
public void onClick(View v){ int position = hoider.getAdapterPosition();
Fruit fruit = mFruitList.get(position);
Toast.makeText(v.getContext(),"you clicked view " + fruit.getName(),Toast.LENGTH_SHORT).show();
}
});
return hoider;
} // 下面参数传入的ViewHolder类型的实例holder,就是我们前面方法onCreateViewHolder返回的类型实例
// 这个实例就是通过fruit_item布局实例化的,ViewHolder里面的控件接收了它们,所以我们就可以利用ViewHolder的控件实例进行赋值操作
@Override
public void onBindViewHolder(ViewHolder holder , int position){ Fruit fruit = mFruitList.get(position);
holder.fruitImage.setImageResource(fruit.getImageId());
holder.fruitText.setText(fruit.getName());
} // 这个方法就是前面我们提到的告诉RecyclerView我们有多少个子项
@Override
public int getItemCount(){ return mFruitList.size();
}
}

上面就是最重要的代码了,下面就是我们MainActy的代码,我们把这个RecyclerView让它横着滑动,看看我们活动里面的代码,最后我们再看看这整个效果运行起来的效果:

看看这整个Demo的效果图:

最新文章

  1. 使用httpclient发送http请求
  2. ajax500错误
  3. Python 系列:1 - Tuples and Sequences
  4. 【4_237】Delete Node in a Linked List
  5. maven Ubuntu14.04 安装
  6. asp显示记录条数
  7. WPF使用RoutedCommand自定义命令
  8. python常错: join() 方法
  9. jsp?echo
  10. curl批处理从官方demo封装
  11. centos 安装nginx
  12. 图论专题训练1-D(K步最短路,矩阵连乘)
  13. 在source中查看代码
  14. SkylineGlobe 7.0.1 &amp; 7.0.2版本Web开发 如何实现土方量计算
  15. 002.MySQL高可用主从复制部署
  16. linux ipv6开启的配置文件
  17. win7(旗舰版)下,OleLoadPicture 加载内存中的图片(MagickGetImageBlob),返回值 &lt; 0
  18. Sed&amp;awk笔记之awk篇(转)
  19. 7.1 服务暴露前的准备-ServiceBean的装配
  20. echarts legend 的单选模式以及轮播技巧

热门文章

  1. 【java】实体类中 Set&lt;对象&gt; 按照对象的某个字段对set排序
  2. Python基础闯关失败总结
  3. 1 django
  4. Django基于Pycharm开发之四[关于静态文件的使用,配置以及源码分析](原创)
  5. 设计模式之第16章-代理模式(Java实现)
  6. 简单实现nodejs爬虫工具
  7. python学习之dictionary函数的用法
  8. CSU-2221 假装是区间众数(ST表模版题)
  9. Java开发微信公众号(二)---开启开发者模式,接入微信公众平台开发
  10. [oldboy-django][深入 rest framework] restframewok 教程: 分页功能