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
转载于:https://www.cnblogs.com/hh8888-log/p/9997826.html
Android学习之基础知识五—RecyclerView(滚动控件)相关推荐
- Android 第十八课 强大的滚动控件 RecyclerView
步骤: 一.添加依赖库 compile'com.android.support:recyclerview-v7:26.1.0' 二.在activity_mian.xml中,添加RecyclerView ...
- html 任务控件,Html基础知识详解-DbManager-WinFrom控件库|.net开源控件库|HZHControls官网...
一定要做的符合客户要求,不是自己认为对的. 一.基础标签 1.1 大小颜色位置 Html和CSS的关系 Hello World! 1.2 强调 如在网上商城中,某产品的打折后的价格是需要强调的.如下图 ...
- ExtJS基础知识总结:常用控件使用方式(一)
概述 最近一直在做相关ExtJs方面的项目,遇到了ExtJs使用方面的一系列问题,现在将使用技巧做个记录汇总,以便于下次能够快速使用.以下都是ExtJs控件的常用方法,做简单汇总,俗话说,好记星不如烂 ...
- Android学习之基础知识十一 —运用手机多媒体
一.使用通知(Notification) 通知(Notification)是Android系统中比较有特色的一个功能,当某个应用程序希望向用户发出一些提示信息,而该应用程序又不在前台运行时,就可以借助 ...
- Android学习之基础知识四-Activity活动7讲(活动的启动模式)
在实际的项目开发中,我们需要根据特定的需求为每个活动指定恰当的启动模式.Activity的启动模式一共有4种:standard.singleTop.singleTask.singleInstance. ...
- android 强制下线功能,Android学习之基础知识八—Android广播机制实践(实现强制下线功能)...
强制下线功能算是比较常见的了,很多的应用程序都具备这个功能,比如你的QQ号在别处登录了,就会将你强制挤下线.实现强制下线功能的思路比较简单,只需要在界面上弹出一个对话框,让用户无法进行任何操作,必须要 ...
- tkinter学习系列之(五)Checkbutton控件
目录 目录 前言 (一)基本属性 (二)案例 1.简单的复选框 2.组合复选框 目录 前言 复选框:可以同时多选的一组框,其只有两种状态,选中与未选中. (一)基本属性 (1)说明: tkinter里 ...
- 张高兴的 Xamarin.Android 学习笔记:(四)常用控件
示例地址 GitHub : https://github.com/ZhangGaoxing/xamarin-android-demo/tree/master/ControlsDemo 转载于:http ...
- 学习编程基础知识,进阶成为更优秀的程序员
"脚本小子"常常从某些网站上复制脚本代码,然后到处粘贴,却并不明白其中的方法与原理 当你看到编程语言编进教材的时候,看到一个文科生也在编写Python程序进行数据分析的时候,你 ...
最新文章
- JQuery中的事件以及动画
- 中国大气污染影响韩国?生态环境部这样反驳
- 用Play 1.x 实现简单云计算多租户设计(Use Play 1.x To Achieve Multi-Tenancy Design)
- Word 2003安全模式修复程序
- 2018-2019-2 20175235 实验四《Android开发基础》实验报告
- gatsby_我如何使用Gatsby和Netlify建立博客
- 给GridView设置行高
- Python deque的用法介绍
- 02怎么取整php,php取整的几种方式
- 2019年新款iPhone高清渲染视频来了 强迫症慎点...
- Java继承中为什么不可以降低父类重写方法的访问权限
- java 读fdb文件_如何真正理解java中的NIO?
- user-agent 批量汇总+随机返回一个
- 图像处理之图像质量评价指标PSNR(峰值信噪比)
- [SSM]报错500:org.springframework.dao.DataIntegrityViolationException
- Vue--基础模板语法以及计算属性
- c语言空格eof什么意思,eof在c语言中表示什么?
- 建筑业房地产管理系统
- PyTorch系列 | correct += (predicted == labels).sum().item()的理解
- PTB-XL大型的心电图数据集
热门文章
- 一文搞懂cookie、session、token、jwt、OAuth
- 天数最少的年份_为何每年二月天数最少且每月有长有短?只因凯撒大帝一句话...
- PHP中跳出循环break,continue,return,exit的区别
- 2005年考研数学一真题pdf ​​​
- 聪聪和可可[NOI2005]
- 毕设 JAVAJSP超市管理系统论文
- hset php,hSet 命令/方法/函数
- 最全的机器学习amp;深度学习入门视频课程集
- php 框架 phpstudy,phpstudy怎样装置swoole扩大_PHP开发框架教程,swoole
- 后pc时代和新一代计算机定义,新一代GPS的线性尺寸查询及标注系统设计