Android学习--RecyclerView

       前面一篇总结了ListView,在这篇我们总结一些这个RecyclerView,我们就从最基本的开始,安卓团队是将RecyclerView定义在support库当中的,因此想要使用RecyclerView这个控件,首先需要在项目的build.gradle中添加相应的依赖库才行。

      下面是添加RecyclerView的相应库:(这里的v7:26.0.0-alphal按照自己相应的版本添加) 

      添加完后记得点击一下 Sysnc Now 来同步一下

      它的基本的创建和添加到XML文件中我们就不在提了,这个比较简单,先看看要是想实现和前面我们写的ListView相同的效果,下面是最重要的适配器里面的代码,注释就是理解的思路,我们选择通篇复制:

/**
 * Created by skotc on 2017/7/18.
 */
// 定义FruitAdapter类,这个类是继承自RecyclerView.Adapter
// public abstract static class Adapter<VH extends ViewHolder> 这句是我们看到的官方的关于Adapter的代码
// 从这句代码中你可以捕捉到的信息就是它的参数 VH 是一个集成自 ViewHolder 的,这也就是我们写ViewHolder必要   
    
public class FruitAdapter extends  RecyclerView.Adapter<FruitAdapter.ViewHolder> {

     //定义一个集合,用来接收这个FruitAdapter初始化之后传进来的数据 因为我们对数据的处理都是在这里进行
     //包括对控件的赋值和告诉这个RecyclerView我们一共有多少条数据
     private List<Fruit> mFruitList;

     //定义一个公共类ViewHolder是继承自RecyclerView.ViewHolder
     public  class  ViewHolder extends RecyclerView.ViewHolder{

          //由于它是继承自RecyclerView.ViewHolder,所以我们再初始化的时候是需要船务一个参数View
          //这个View能帮助我们获取到RecyclerView子项我们定义的控件,所以我们在这里定义了下面两个控件,同样是用来接收他们
          //接收的主要目的是在我们下面的方法里面给他们赋值
          ImageView fruitImage;
          TextView  fruitText;

          // 为了点击事件定义的View
          View fruitView;
          // 这个ViewHolder类型的初始化以及参数和前面我们写的Adapter的道理相同,多看官方源码理解!
          public ViewHolder(View view){

               super(view);
               // 这个我们自定义的fruitView接收view,这个View的参数就是RecyclerView子项的最外层的布局,我们可以在它上面就点击事件
               fruitView = view;
               // 这里就是获取两个控件
               fruitImage = (ImageView) view.findViewById(R.id.fruit_image);
               fruitText  = (TextView)  view.findViewById(R.id.fruit_name);
           }
     }

    //我们定义的FruitAdapter类的构造方法
    public  FruitAdapter(List<Fruit> fruitList ){

        mFruitList = fruitList;
    }

    //由于我们定义的FruitAdapter是继承RecyclerView.Adapter
    //所以下面三个方法我们都要重写
    @Override
    public ViewHolder onCreateViewHolder ( ViewGroup parent , int viewType){

         // 获取fruit_item的布局View
         View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.fruit_item,parent,false);

         // 再用这个View来初始化我们定义的ViewHolder类
         final ViewHolder hoider = new ViewHolder(view);

         // 点击事件
         hoider.fruitView.setOnClickListener(new View.OnClickListener(){

            @Override
            public void onClick(View v){

                int position = hoider.getAdapterPosition();
                Fruit fruit  = mFruitList.get(position);
                Toast.makeText(v.getContext(),"you clicked view " + fruit.getName(),Toast.LENGTH_SHORT).show();
            }
         });
         return  hoider;
    }

    // 下面参数传入的ViewHolder类型的实例holder,就是我们前面方法onCreateViewHolder返回的类型实例
    // 这个实例就是通过fruit_item布局实例化的,ViewHolder里面的控件接收了它们,所以我们就可以利用ViewHolder的控件实例进行赋值操作
    @Override
    public void onBindViewHolder(ViewHolder holder , int position){

        Fruit fruit = mFruitList.get(position);
        holder.fruitImage.setImageResource(fruit.getImageId());
        holder.fruitText.setText(fruit.getName());
    }

    // 这个方法就是前面我们提到的告诉RecyclerView我们有多少个子项
    @Override
    public  int getItemCount(){

        return mFruitList.size();
    }
}

      上面就是最重要的代码了,下面就是我们MainActy的代码,我们把这个RecyclerView让它横着滑动,看看我们活动里面的代码,最后我们再看看这整个效果运行起来的效果:

看看这整个Demo的效果图:

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏分享达人秀

完善RecyclerView,添加首尾视图

在之前学习ListView的时候,有学习过如何给ListView添加列表头和列表尾。但是通过近几期的学习,发现RecyclerView是一个比ListV...

2448
来自专栏水击三千

Android应用开发SharedPreferences存储数据的使用方法

SharedPreferences是Android中最容易理解的数据存储技术,实际上SharedPreferences处理的就是一个key-value(键值对)...

3236
来自专栏开发之途

Android 解析RecyclerView(1)——带点击事件监听的通用Adapter

1703
来自专栏Android开发指南

Android自动轮播的三种方式

3938
来自专栏技术小黑屋

避免Android中Context引起的内存泄露

Context是我们在编写Android程序经常使用到的对象,意思为上下文对象。 常用的有Activity的Context还是有Application的Cont...

901
来自专栏上善若水

002android初级篇之ViewPager及PagerSlidingTabStrip listview的使用

listView是一个可以用来显示视图列表的控件。 它使用适配器来为之提供数据和资源。

1283
来自专栏Android常用基础

简单好用的RecyclerView适配器

给大家推荐个好用RecyclerView适配器,也就是在百篮应用里用到的适配器。为了大家学习方便,这里简单的写下如何使用这个适配器,不做代码具体的分析,有兴趣的...

1353
来自专栏KK的小酒馆

Adapter与ListView的简单应用(下)Android应用界面开发

1.继续分析Adapter的常用类 上一篇文章使用了ArrayAdapte制作了一个只由简单的文字组成的ListView,那ArrayAdapter是不是只有...

1022
来自专栏mukekeheart的iOS之旅

Andriod基础——Adapter类

Android是完全遵循MVC模式设计的框架,Activity是Controller,layout是View,因为layout五花八门,很多数据都不能直接绑定上...

3605
来自专栏Android Note

Android - 接口、MVP 的使用心得

想象一下,有这么一个场景(需求),两个不同的页面,但是页面的展示 UI 是完全相同的。这时候你会想到,这很简单啊,复用吗。但但但但是,它们的数据格式是完全不相同...

992

扫码关注云+社区

领取腾讯云代金券