zoukankan      html  css  js  c++  java
  • 安卓学习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)

  • 相关阅读:
    解决NLPIR汉语分词系统init failed问题
    牛客小白月赛3---G 旅游(树形dp)
    蓝桥杯 能量项链 (区间dp)
    OpenJ_Bailian
    LeetCode#169 Majority Element
    LeetCode#171 Excel Sheet Column Number
    LeetCode#172 Factorial Trailing Zeroes
    this指针
    auto、register、extern以及static
    const与static
  • 原文地址:https://www.cnblogs.com/Lizhichengweidashen/p/14903903.html
Copyright © 2011-2022 走看看