14、RecyclerView-Android强化课程笔记

1、简介

RecyclerView是support-v7包中的新组件,是一个强大的滑动组件,与经典的ListView相比,同样拥有item回收复用的功能。

RecyclerView是ListView的升级版:

  1. RecyclerView封装了ViewHolder的回收复用‘
  2. 提供了一种插拔式的体验,高度的解耦,异常的灵活
    • LinearLayoutManager——横向或纵向滑动的列表
    • GridLayoutManager——类似于GridView的效果
    • StaggeredGridLayoutManager——可以实现瀑布流的效果
  3. 可以控制Item增删的动画,并支持自定义动画。

2、RecyclerView的基本使用

1.在Modulebuild.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的代码如下:

这里写代码片

猜你喜欢

转载自blog.csdn.net/chaixingsi/article/details/81434090