RecyclerView可以说是增强版的ListView,不仅具有ListVIew的效果,还弥补许多ListView的不足。

一、RecyclerView的基本用法

  与百分比布局类似,RecyclerView也属于新增的控件,为了使RecyclerView在所有Android版本上都能使用,Android团队采取了同样的方式,将RecyclerView定义在了support库当中。因此想要使用RecyclerView这个控件,首先需要在项目的build.gradle中添加相应的依赖库才行。

第一步:打开app/build.gradle文件,在dependencies闭包中添加:

implementation 'com.android.support:recyclerview-v7:27.1.1'

添加完成后,需要点击右上角的Sync Now

第二步:在activity_mian.xml中添加RecyclerView控件,控件宽度和高度都设置为与父布局一致,注意:RecyclerView不是内置在系统的SDK中,所以要把完整的包路径写出来。

第三步:创建Fruit实体类,定义两个字段:水果名称、水果图片id,每个字段定义一个get()方法,用于获取字段,定义一个构造函数,传入两个字段。

第四步:创建水果子项布局fruit_item.xml,添加水果图片控件(ImageView)、水果名称控件(TextView)

第五步:自定义适配器FruitAdapter,继承RecyclerView.Adapter,泛型指定为:FruitAdapter.ViewHolder

第六步:在MainActivity中完成适配器配置

第七步:运行程序,滑动屏幕,和上一章ListView的效果一样

   

 二、RecyclerView实现横向滑动

第一步:修改fruit_item.xml中的代码(Fruit子项布局)

  1、orientation="vertical":将子项布局方式改为垂直(控件与框架之间垂直排列),宽度改为“100dp”,设为固定值是为了防止子项因为水果文字的长短而有长有短,显得非常不美观

  2、layout_gravity="center_horizontal":将水果图片和水果名称都设置为在布局中水平居中

  3、layout_marginTop:让文字和图片之间保持一段距离。

第二步:在MainActivity中,设置布局的排列方向:setOrientation()方法,默认是纵向排列,横向排列:LinearLayoutManager.HORIZONTAL

第三步:运行程序,滑动屏幕效果如下

   

三、RecyclerView实现瀑布流布局

  除了LinearLayoutManager之外,RecyclerView还提供了GridLayoutManager和StaggeredGridLayoutManager这两种内置的布局排列方式,GridLayoutManager可以实现网格布局,StaggeredGridLayoutManager可以用于实现瀑布流布局,下面我们就来实现一下瀑布流布局。

第一步:修改fruit_item.xml中的代码

  1、将LinearLayout的宽度改为:match_parent,因为瀑布流布局的宽度应该由布局的列数来自动适配

  2、layout_margin属性:使每个子项之间都互留一定的间距,不至于贴得太近。

第二步:将布局排列方式改为瀑布流布局:StaggeredGridLayoutManager

  StaggeredGridLayoutManager()构造函数中传入两个参数:

    第一个参数:用于指定布局的列数,4表示指定布局的列数为4列。

    第二个参数:用于指定布局的排列方向:StaggeredGridLayoutManager.VERTICAL(布局纵向排列)

第三步:运行程序,上下滑动屏幕效果如下:

   

 四、RecyclerView的点击事件

  和ListView一样,RecyclerView也必须要有点击事件才行,但是不同于ListView 的点击事件,RecyclerView没有提供类似于:setOnItemClickListener()这样的注册监听器方法,而是需要我们自己给子项具体的View去注册点击事件,相比ListView来说,实现要复杂一点。

  为什么要这么做呢?这是因为ListView在点击事件上的处理并不人性化,setOnItemClickListener()方法注册的是子项的点击事件,而不是子项里具体某个按钮的点击事件,虽然ListView也能够实现点击子项里面某个具体的按钮,但是实现起来相对比较麻烦。所以RecyclerView直接摒弃了子项点击事件的监听器,所有的点击事件都由具体的View去注册,就没有这个困扰了。

  下面具体来看看RecyclerView中的注册点击事件。

第一步:在FruitAdapter适配器中注册点击事件

  1、在ViewHolder中保存水果子项最外层布局实例

  2、在onCreateViewHolder中注册监听事件

    viewHolder.fruitView.setOnClickListener():子项最外层布局的点击事件

    viewHolder.fruitImage.setOnClickListener():水果图片的点击事件

第二步:运行程序,分别点击图片和文字,效果如下:

  1、点击Apple图片,触发了ImageView的点击事件:显示:You Clicked imageApple

  2、点击Banana文字,由于TextView没有注册点击事件,被子项最外层布局捕获到了,因此显示:You Clicked viewBanana

   

转载于:https://www.cnblogs.com/hh8888-log/p/9997826.html

Android学习之基础知识五—RecyclerView(滚动控件)相关推荐

  1. Android 第十八课 强大的滚动控件 RecyclerView

    步骤: 一.添加依赖库 compile'com.android.support:recyclerview-v7:26.1.0' 二.在activity_mian.xml中,添加RecyclerView ...

  2. html 任务控件,Html基础知识详解-DbManager-WinFrom控件库|.net开源控件库|HZHControls官网...

    一定要做的符合客户要求,不是自己认为对的. 一.基础标签 1.1 大小颜色位置 Html和CSS的关系 Hello World! 1.2 强调 如在网上商城中,某产品的打折后的价格是需要强调的.如下图 ...

  3. ExtJS基础知识总结:常用控件使用方式(一)

    概述 最近一直在做相关ExtJs方面的项目,遇到了ExtJs使用方面的一系列问题,现在将使用技巧做个记录汇总,以便于下次能够快速使用.以下都是ExtJs控件的常用方法,做简单汇总,俗话说,好记星不如烂 ...

  4. Android学习之基础知识十一 —运用手机多媒体

    一.使用通知(Notification) 通知(Notification)是Android系统中比较有特色的一个功能,当某个应用程序希望向用户发出一些提示信息,而该应用程序又不在前台运行时,就可以借助 ...

  5. Android学习之基础知识四-Activity活动7讲(活动的启动模式)

    在实际的项目开发中,我们需要根据特定的需求为每个活动指定恰当的启动模式.Activity的启动模式一共有4种:standard.singleTop.singleTask.singleInstance. ...

  6. android 强制下线功能,Android学习之基础知识八—Android广播机制实践(实现强制下线功能)...

    强制下线功能算是比较常见的了,很多的应用程序都具备这个功能,比如你的QQ号在别处登录了,就会将你强制挤下线.实现强制下线功能的思路比较简单,只需要在界面上弹出一个对话框,让用户无法进行任何操作,必须要 ...

  7. tkinter学习系列之(五)Checkbutton控件

    目录 目录 前言 (一)基本属性 (二)案例 1.简单的复选框 2.组合复选框 目录 前言 复选框:可以同时多选的一组框,其只有两种状态,选中与未选中. (一)基本属性 (1)说明: tkinter里 ...

  8. 张高兴的 Xamarin.Android 学习笔记:(四)常用控件

    示例地址 GitHub : https://github.com/ZhangGaoxing/xamarin-android-demo/tree/master/ControlsDemo 转载于:http ...

  9. 学习编程基础知识,进阶成为更优秀的程序员

    "脚本小子"常常从某些网站上复制脚本代码,然后到处粘贴,却并不明白其中的方法与原理 ​​当你看到编程语言编进教材的时候,看到一个文科生也在编写Python程序进行数据分析的时候,你 ...

最新文章

  1. JQuery中的事件以及动画
  2. 中国大气污染影响韩国?生态环境部这样反驳
  3. 用Play 1.x 实现简单云计算多租户设计(Use Play 1.x To Achieve Multi-Tenancy Design)
  4. Word 2003安全模式修复程序
  5. 2018-2019-2 20175235 实验四《Android开发基础》实验报告
  6. gatsby_我如何使用Gatsby和Netlify建立博客
  7. 给GridView设置行高
  8. Python deque的用法介绍
  9. 02怎么取整php,php取整的几种方式
  10. 2019年新款iPhone高清渲染视频来了 强迫症慎点...
  11. Java继承中为什么不可以降低父类重写方法的访问权限
  12. java 读fdb文件_如何真正理解java中的NIO?
  13. user-agent 批量汇总+随机返回一个
  14. 图像处理之图像质量评价指标PSNR(峰值信噪比)
  15. [SSM]报错500:org.springframework.dao.DataIntegrityViolationException
  16. Vue--基础模板语法以及计算属性
  17. c语言空格eof什么意思,eof在c语言中表示什么?
  18. 建筑业房地产管理系统
  19. PyTorch系列 | correct += (predicted == labels).sum().item()的理解
  20. PTB-XL大型的心电图数据集

热门文章

  1. 一文搞懂cookie、session、token、jwt、OAuth
  2. 天数最少的年份_为何每年二月天数最少且每月有长有短?只因凯撒大帝一句话...
  3. PHP中跳出循环break,continue,return,exit的区别
  4. 2005年考研数学一真题pdf ​​​
  5. 聪聪和可可[NOI2005]
  6. 毕设 JAVAJSP超市管理系统论文
  7. hset php,hSet 命令/方法/函数
  8. 最全的机器学习amp;深度学习入门视频课程集
  9. php 框架 phpstudy,phpstudy怎样装置swoole扩大_PHP开发框架教程,swoole
  10. 后pc时代和新一代计算机定义,新一代GPS的线性尺寸查询及标注系统设计