安卓学习13(RecyclerView)

1、目标任务:

学习Android——RecyclerView基本知识

2、预计时间:

1天

3、完成情况:

  1. 引入RecyclerView

    • 在build.gradle文件中引入该类:compile 'com.android.support:recyclerview-v7:23.4.0'
  2. 创建适配器

    1. 创建Adapter:创建一个继承RecyclerView.Adapter<VH>的Adapter类(VH是ViewHolder的类名)
    2. 创建ViewHolder:在Adapter中创建一个继承RecyclerView.ViewHolder的静态内部类,记为VH
    3. 在Adapter中实现3个方法:
    • onCreateViewHolder()
      这个方法主要生成为每个Item inflater出一个View,但是该方法返回的是一个ViewHolder。该方法把View直接封装在ViewHolder中,在onCreateViewHolder()中,映射Layout必须为:View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_1, parent, false);
    • onBindViewHolder():用于适配渲染数据到View中
    • getItemCount():总共有多少个条目
    • // ① 创建Adapter
      public class NormalAdapter extends RecyclerView.Adapter<NormalAdapter.VH>{
          //② 创建ViewHolder
          public static class VH extends RecyclerView.ViewHolder{
              public final TextView title;
              public VH(View v) {
                  super(v);
                  title = (TextView) v.findViewById(R.id.title);
              }
          }
          
          private List<String> mDatas;
          public NormalAdapter(List<String> data) {
              this.mDatas = data;
          }
      
          //③ 在Adapter中实现3个方法
          @Override
          public void onBindViewHolder(VH holder, int position) {
              holder.title.setText(mDatas.get(position));
              holder.itemView.setOnClickListener(new View.OnClickListener() {
                  @Override
                  public void onClick(View v) {
                      //item 点击事件
                  }
              });
          }
      
          @Override
          public int getItemCount() {
              return mDatas.size();
          }
      
          @Override
          public VH onCreateViewHolder(ViewGroup parent, int viewType) {
              //LayoutInflater.from指定写法
              View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_1, parent, false);
              return new VH(v);
          }
      }
  3. 设置RecyclerView

    1. Layout Manager(必选)
    2. Adapter(必选)
    3. Item Decoration(可选,默认为空)
    4. Item Animator(可选,默认为DefaultItemAnimator)
    5. List<String> data = initData();
      RecyclerView rv = (RecyclerView) findViewById(R.id.rv);
      rv.setLayoutManager(new LinearLayoutManager(this));
      rv.setAdapter(new NormalAdapter(data));
  4. Adapter适配器

    • 为RecyclerView提供数据
  5. Item Decoration间隔样式

      • RecyclerView通过addItemDecoration()方法添加item之间的分割线

    自定义间隔样式需要继承RecyclerView.ItemDecoration类,该类是个抽象类,官方目前并没有提供默认的实现类,主要有三个方法。

    1. onDraw(Canvas c, RecyclerView parent, State state),在Item绘制之前被调用,该方法主要用于绘制间隔样式。
    2. onDrawOver(Canvas c, RecyclerView parent, State state),在Item绘制之前被调用,该方法主要用于绘制间隔样式。
    3. getItemOffsets(Rect outRect, View view, RecyclerView parent, State state),设置item的偏移量偏移的部分用于填充间隔样式,即设置分割线的宽、高;在RecyclerView的onMesure()中会调用该方法。

    onDraw()onDrawOver()这两个方法都是用于绘制间隔样式,我们只需要复写其中一个方法即可。

4、遇到问题:

对于适配器Adapter不是很熟悉

学习内容参考于:Android 控件 RecyclerView - 简书 (jianshu.com)

原文地址:https://www.cnblogs.com/Lizhichengweidashen/p/14903903.html