RecyclerView的使用前提是要在app/builder.gradle里引入依赖。
单纯的RecyclerView是没有什么实际意义的,它只是一个放置东西的控件,所以使用RecyclerView的第一步要考虑的就是要放什么样的布局进去,称为子项布局,这点和ListView是一样的,子项布局里展示的就是列表中每个子选项的显示布局。
创建完RecyclerView的子项布局后,并不是可以直接放置到RecyclerView里面的,因为还有数据要放进去,生硬地匹配和放置是低效率的,所以出现适配器Adapter这样的类,用这样的类的实例来适配RecyclerView的子选项、子项布局、子数据三者的结合协调,所以第二步是去制作一个适配器,并配置好适配器。RecyclerView的适配器与其他适配器是不同的(有三个方法需要重写),所以该适配器继承自RecyclerView自带的适配器RecyclerView.Adapter;RecyclerView的适配器里有一个关键的内部类,ViewHolder,顾名思义,View的持有者,可以理解为View的集合,继承自RecyclerView自带的ViewHolder,ViewHolder就是用来操作子项布局的,那如何获得子项布局以及创建对应的ViewHolder实例呢?用重写的方法之一ViewHolder onCreateViewHolder(ViewGroup parent, int viewTpye)来创建,这个方法通过适配器所在的ViewGroup,也就是基本框架里的某一种,调用该框架的getContext()获得框架所在的上下文,再用获得的上下文调用布局填充器(需要传入被指定的上下文才能使用)加载所需要的子项布局,然后把获得的子项布局传递到ViewHolder类的构造方法里构造出一个ViewHolder的实例,这样就完成了子项布局的加载;对于数据,是在创建适配器实例时传进来的,因此在适配器的构造方法中设置传进来的参数为需要的数据;那如何制定 装有子项布局的ViewHolder、从RecyclerView构成函数传进来的数据、RecyclerView子选项之间的联系呢?重写另一个方法onBindViewHolder(ViewHolder viewHolder, int position),其中position就是RecyclerView显示在屏幕上的子选项的ID,它与数据之间是一一对应的,一个ID里放置一个要显示的子数据,然后用这个ID读取出此时应该要显示的数据,把该数据放置到ViewHolder实例里,这样就完成了三者之间的结合协调;最后一个需要重写的方法是getItemCount(),顾名思义,就是返回列表的子选项个数,而子选项个数取决于数据的子数据个数,所以一般在这里返回数据的子数据个数。
现在子项布局制作完成了,适配器也制作完成了,最后一步去设置RecyclerView的适配器就行了。但是RecyclerView比ListView强大,它有几种显示列表的方法,所以在设置适配器前要先指定RecyclerView的显示方式;不同的方式都对应一个管理类,XXXManager,然后设置RecyclerView的LayoutManager就可以了。
关于如何制定RecyclerView的子选项点击事件。RecyclerView与ListView不一样,它把点击后的事件交给被点击的子项布局自己处理,而子项布局在onCreateViewHolder的方法里获得了,所以在那里设置子项布局的点击事件,也算是构造具有点击反应的ViewHolder。