1、简介
RecyclerView是support-v7包中的新组件,是一个强大的滑动组件,与经典的ListView相比,同样拥有item回收复用的功能。
RecyclerView是ListView的升级版:
- RecyclerView封装了ViewHolder的回收复用‘
- 提供了一种插拔式的体验,高度的解耦,异常的灵活
- LinearLayoutManager——横向或纵向滑动的列表
- GridLayoutManager——类似于GridView的效果
- StaggeredGridLayoutManager——可以实现瀑布流的效果
- 可以控制Item增删的动画,并支持自定义动画。
2、RecyclerView的基本使用
1.在Module
的build.gradle
文件中的dependencies
下添加RecyclerView所需依赖(除了recyclerview,还需要添加okhttp、gson、glide依赖,本项目都会用到):
implementation 'com.android.support:recyclerview-v7:27.1.1'
implementation 'com.squareup.okhttp3:okhttp:3.11.0'
implementation 'com.google.code.gson:gson:2.8.5'
implementation 'com.github.bumptech.glide:glide:4.7.1'
2.新建一个名为RecyclerViewDemo
的项目,新建BaseRecyclerViewActivity
(勾选创建布局文件),在布局文件activity_base_recycler_view
中添加一个RecyclerView控件,将其id设置为recyclerView
,以备使用。
3.接下来要读取以下所示数据(图一为请求的所有数据,图二为data项的内容)。
- ①、请求的数据为一个对象,成员属性为:status、data(数组)、msg。
- ②、data(数组)中含有的对象,成员属性有:id、name、picSmall、picBig(这里忽略该项)、description、learner。
- ③、新建一个名为
model
的包,在其中新建一个名为ImageData
的类。
public class ImageData {
private int status;
private String msg;
private List<DataBean> data;
public int getStatus() {
return status;
}
public void setStatus(int status) {
this.status = status;
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
public List<DataBean> getData() {
return data;
}
public void setData(List<DataBean> data) {
this.data = data;
}
public static class DataBean{
private int id;
private String name;
private String picSmall;
private String description;
private int learner;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPicSmall() {
return picSmall;
}
public void setPicSmall(String picSmall) {
this.picSmall = picSmall;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public int getLearner() {
return learner;
}
public void setLearner(int learner) {
this.learner = learner;
}
}
}
- ④、新建一个名为
utils
的包,在其中新建一个名为JsonUtil
的类,用于解析数据。
4.编写Adapter,新建一个适配器名为MyAdapter
继承自RecyclerView.Adapter
,继承三个方法:onCreateViewHolder(创建视图)、onBindViewHolder(填充数据)、getItemCount(获取数量)
,并编写item的xml布局文件,最后填充数据给item。
- ①、这里首先编写item的布局文件,新建一个名为
simple_item
线性布局文件
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="200dp"
android:layout_height="150dp"
android:orientation="vertical">
<ImageView
android:id="@+id/imageView"
android:layout_width="200dp"
android:layout_height="150dp"
android:scaleType="fitXY" />
</LinearLayout>
- ②、新建一个名为
adapter
的包,新建一个适配器MyAdapter
,代码如下:
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MainViewHolder> {
private Context mContext;
private List<String> mList;
public MyAdapter(Context context,List<String> list) {
this.mContext = context;
this.mList = list;
}
/**
* 初始化控件
*/
static class MainViewHolder extends RecyclerView.ViewHolder {
ImageView mImageView;
MainViewHolder(View itemView) {
super(itemView);
mImageView = itemView.findViewById(R.id.imageView);
}
}
/**
* 创建视图
*/
@NonNull
@Override
public MainViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(mContext).inflate(R.layout.simple_item, parent, false);
return new MainViewHolder(view);
}
/**
* 填充数据
*/
@Override
public void onBindViewHolder(@NonNull MainViewHolder holder, int position) {
String url = mList.get(position);
Glide.with(mContext).load(url).into(holder.mImageView);
}
/**
* 获取item的总个数
*/
@Override
public int getItemCount() {
return mList.size();
}
}
5.BaseRecyclerViewActivity
的代码如下:
这里写代码片