Android学习之基础知识五—RecyclerView(滚动控件)
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

Android学习之基础知识五—RecyclerView(滚动控件)的更多相关文章
- Android学习之基础知识五—创建自定义控件
下面是控件和布局的继承关系: 从上面我们看到: 1.所有控件都是直接或间接继承View,所有的布局都是直接或间接继承ViewGroup 2.View是Android中最基本的UI组件,各种组件其实就是 ...
- Android学习之基础知识五—Android常用的七大控件
一.TextView控件:在界面上显示一段文本信息 先看XML代码和执行效果: 代码分析: 1.android:id属性,给当前控件定义了一个唯一的标识符 2.android:layo ...
- Android学习之基础知识五—ListView控件(最常用和最难用的控件)
ListView控件允许用户通过上下滑动来将屏幕外的数据拉到屏幕内,把屏幕内的数据拉到屏幕外. 一.ListView的简单用法第一步:先创建一个ListViewTest项目,在activity_mia ...
- Android学习之基础知识五—编写聊天界面
第一步:在app/build.grandle添加RecyclerView依赖库 第二步:在activity_main.xml文件中编写主界面:聊天.发送框.发送按钮三个部分 第三步:编写Message ...
- Android学习之基础知识十五 — 最佳UI体验(Material Design实战)
一.前言 长久以来,大多数人都认为Android系统的UI并不美观,至少没有iOS系统的美观.以至于很多IT公司在进行应用界面设计的时候,为了保证双平台的统一性,强制要求Android端的界面风格必须 ...
- Android学习之基础知识十—内容提供器(Content Provider)
一.跨程序共享数据——内容提供器简介 内容提供器(Content Provider)主要用于在不同的应用程序之间实现数据共享的功能,它提供了一套完整的机制,允许一个程序访问另一个程序中的数据,同时还能 ...
- Android学习之基础知识十六 — Android开发高级技巧的掌握
一.全局获取Context的技巧 前面我们很多地方都使用到了Context,弹出Toast的时候.启动活动的时候.发送广播的时候.操作数据库的时候.使用通知的时候等等.或许目前来说我们并没有为得不到C ...
- Android学习之基础知识十四 — Android特色开发之基于位置的服务
一.基于位置的服务简介 LBS:基于位置的服务.随着移动互联网的兴起,这个技术在最近的几年里十分火爆.其实它本身并不是什么时髦的技术,主要的工作原理就是利用无线电通讯网络或GPS等定位方式来确定出移动 ...
- Android学习之基础知识十三 — 四大组件之服务详解第一讲
一.服务是什么 服务(Service)是Android中实现程序后台运行的解决方案,它非常适合去执行那些不需要和用户交互而且还要求长期运行的任务.服务的运行不依赖于任何用户界面,即使程序被切换到后台, ...
随机推荐
- lfs(systemd版本)学习笔记-第2页
我的邮箱地址:zytrenren@163.com欢迎大家交流学习纠错! lfs(systemd)学习笔记-第1页 的地址:https://www.cnblogs.com/renren-study-no ...
- 运行gulp项目报错:AssertionError: Task function must be specified。
一.问题描述: gulp项目在本地windows 10机器上跑没有任何问题,但是放在centos 7虚拟机上跑报错:AssertionError: Task function must be spec ...
- NopCommerce 根据手机浏览器和桌面浏览器切换 Theme
自从 NopCommerce 升级到 3.x 以来,默认的 ViewName.Mobile.cshtml 方式就被响应式的默认 Theme 取代了. 但是在今天各种手机专用前端库大行其道的情况下,响应 ...
- 异步陷阱之IO篇
很多教程和资料都强调流畅的用户体验需要异步来辅助,核心思想就是保证用户前端的交互永远有最高的优先级,让一切费时的逻辑通通放到后台,等到诸事完备,通知一下前端给个提示或者继续下一步.随着.NET发展,a ...
- Jenkins 解决Jenkins下java无法运行slave-agent jnlp程序连接Windows Slave主机
解决Jenkins下java无法运行slave-agent jnlp程序连接Windows Slave主机 by:授客 QQ:1033553122 测试环境 java下载地址:http://www ...
- 《Inside C#》笔记(三) 数据类型
数据类型系统是一门编程语言的核心..NET系列的语言使用统一的数据类型系统CTS(Common Type System).所有的数据类型都继承自System.Object. 一 值类型和引用类型 a) ...
- vmare连接远程服务器的问题
测试环境:两端都是VMware Workstation 12 Pro 1.需要共享虚拟机 在虚拟机上点击右键 -> Manage -> Share 后面按照操作设置 2.远程服务器的443 ...
- HTTP的Referrer和Referrer Policy设置
Referrer referrer是HTTP请求header的报文头,用于指明当前流量的来源参考页面.通过这个信息,我们可以知道访客是怎么来到当前页面的.这对于Web Analytics非常重要,可以 ...
- matplotlib多plot可视化
代码: # -*- coding: utf-8 -*- """ Created on Thu Jul 12 16:37:47 2018 @author: zhen &qu ...
- 09-OpenLDAP加密传输配置
OpenLDAP加密传输配置(CA服务器与openldap服务器异机) 阅读视图 环境准备 CA证书服务器搭建 OpenLDAP服务端与CA集成 OpenLDAP客户端配置 客户端测试验证 故障处理 ...