【移动应用开发】界面设计(二)实现水果列表页面
续上一篇博客
【移动应用开发】界面设计(一)实现登录页面-CSDN博客
目录
一、采用ViewBinding实现一个RecyclerView
1.1 在app/build.gradle中添加recyclerview依赖,并打开viewBinding
(1)在app/build.gradle中添加依赖
(2)在app/build.gradle中打开viewBinding功能
(3)点击同步Sync,同步项目
1.2 在layout目录下创建一个fruit_item.xml
(1)设置为LinearLayout
(2)插入ImageView
(3)插入TextView
1.3 修改activity_main.xml
(1)将布局改为LinearLayout
(2)插入RecyclerView控件
1.4 新建一个命名为Fruit的类
(1)Fruit类
(2)Kotlin类
1.5 新建一个名为FruitAdapter的适配器类
(1)同理,新建一个类文件,命名为FruitAdapter
(2)重写onCreateViewHolder、onBindViewHolder和getItemCount方法
1.6 修改MainActivity类
(1)新增一个私有val变量fruitList
(2)新增一个私有var变量binding
(3)修改onCreate()方法
(4)新建私有方法initFruits()
(5)修改onCreate()方法
(6)创建一个layoutManager
(7)创建一个adapter
1.7 实现点击事件
(1)修改MainActivity类
(2)运行截图
二、心得体会
2.1 如需加入RecyclerView控件,需要对工程环境做何种配置?
(1)在build.grade文件中导入依赖
(2) 如果想用视图绑定模式,同样在build.grade文件中设置
2.2 设计一个RecyclerView,其中每一个item是否需要一个自定义布局?在实验中该自定义布局是哪个文件?对应的,是否需要一个实体类?布局的控件和实体类的字段是否需要对应?
2.3 为RecyclerView创建一个Fruit适配器,创建一个内置类ViewHolder,是怎样获取自定义布局中的实例?
2.4 如何对ViewHolder中的实例进行数据绑定的?
2.5 如何在Activity中对RecyclerView的布局方式进行设置?
2.6 如何在Activity中对RecyclerView的适配器绑定为Fruit适配器?
2.7 如何打开ViewBinding功能?
2.8 如果在Activity的布局中有一个按钮,我们应如何在onCreate中添加按钮的点击监听事件?
2.9 在RecyclerView的Adapter中,我们可以在ViewHolder内置类中传入item布局的binding。
一、采用ViewBinding实现一个RecyclerView
1.1 在app/build.gradle中添加recyclerview依赖,并打开viewBinding
(1)在app/build.gradle中添加依赖
其中版本号1.x.0将会自动更新。
(2)在app/build.gradle中打开viewBinding功能
在android字段下将viewBinding设置为true
(3)点击同步Sync,同步项目
1.2 在layout目录下创建一个fruit_item.xml
(1)设置为LinearLayout
宽度为match_parent
高度为80dp
layout_margin设为5dp
(2)插入ImageView
id为fruitImage
宽和高均为40dp
layout_gravity为center_vertical
marginLeft为10dp
(3)插入TextView
id为fruitName
宽和高均为wrap_content
layout_gravity为center_vertical
marginLeft为10dp
1.3 修改activity_main.xml
(1)将布局改为LinearLayout
宽和高match_parent
orientation设为vertical
(2)插入RecyclerView控件
androidx.recyclerview.widget.RecyclerView
宽度高度均设为match_parent
id为recyclerView
1.4 新建一个命名为Fruit的类
(1)Fruit类
在app/src/main/java/com.example.recyclerviewtest下右键newàKotlin Class/File
(2)Kotlin类
(以下使用Kotlin来编写)
1.5 新建一个名为FruitAdapter的适配器类
(1)同理,新建一个类文件,命名为FruitAdapter
该类传入参数fruitList,约束为一个列表类型List<Ranking>,继承RecylcerView.Adapter。
定义一个内置类,传入一个FruitItemBinding的binding绑定,
加入两个变量fruitImage和fruitName,并绑定为FuitItemBinding的fruitImage和fruitName
(2)重写onCreateViewHolder、onBindViewHolder和getItemCount方法
onCreateViewHolder将fruit_item的绑定类FruitItemBinding展开,然后新建ViewHolder并传回;
onBindViewHolder将ViewHolder的两个变量fruitImage和fruiteName进行数据绑定。
1.6 修改MainActivity类
(1)新增一个私有val变量fruitList
类型为ArrayList<Fruit>
(2)新增一个私有var变量binding
设置为稍后初始化,绑定为ActivityMainBinding,用于调用activity_main.xml对应的Binding类
(3)修改onCreate()方法
将ActivityMainBinding传入binding,然后用binding.root来设置ContentView
(4)新建私有方法initFruits()
新增fruitList的列项,将水果名以及对应的图片添加进去
(5)修改onCreate()方法
使用initFruits()方法进行fruitList的初始化
(6)创建一个layoutManager
传入binding.recyclerView.layoutManager中
(7)创建一个adapter
传入binding.recyclerView.adapter中
1.7 实现点击事件
(1)修改MainActivity类
在FruitAdapteronCreateViewHolder中,打开viewHolder中的控件监听事件
viewHolder.itemView.setOnClickListener{};
在监听事件中,取得点击位置
val position = viewHolder. bindingAdapterPosition
在监听事件中,实现Toast功能,注意判断位置是否为空
(2)运行截图
点击Pear,显示成功
鼠标往下滑,页面实现滚动,点击最后一个水果,成功弹窗对应水果名称。
二、心得体会
2.1 如需加入RecyclerView控件,需要对工程环境做何种配置?
(1)在build.grade文件中导入依赖
(2) 如果想用视图绑定模式,同样在build.grade文件中设置
2.2 设计一个RecyclerView,其中每一个item是否需要一个自定义布局?在实验中该自定义布局是哪个文件?对应的,是否需要一个实体类?布局的控件和实体类的字段是否需要对应?
(1)其中每一个item都有对应的自定义布局,根据不同的业务需求显示不同的效果;
(2)本实验对应的自定义布局是fruit_item.xml;
(3)一般需要一个实体类去维护每个item的信息,封装成对象,作为适配器的适配类型,便于开发,同时含义也更清晰;
(4)布局的控件和实体类的字段不需要对应,在操作的时候我们是手动设置的
2.3 为RecyclerView创建一个Fruit适配器,创建一个内置类ViewHolder,是怎样获取自定义布局中的实例?
每一个item对应着一个ViewHolder,而每一个ViewHolder对应着item.xml文件中的组件。
当页面刚加载或者上下滚动的时候 会调用onCreateViewHolder方法。而该方法返回了ViewHolder对象。然后调用onBindViewHolder方法,我们在里面根据数据位置与当前item的viewholder设置了对应的值,然后就可以对应上了。
2.4 如何对ViewHolder中的实例进行数据绑定的?
当获取完viewHolder之后会去调用onBindViewHolder方法,在这个方法里面根数当前item的viewholder设置了对应的值,这样就可以对应上了。
2.5 如何在Activity中对RecyclerView的布局方式进行设置?
(1)动态载入布局文件,由于MainActivity与activity_layout.xml是对应的,首先要获取xml文件对象,然后通过inflate进行实例化
(2)设置布局管理器
2.6 如何在Activity中对RecyclerView的适配器绑定为Fruit适配器?
直接实例化一个对象并将它设置为适配器即可。
2.7 如何打开ViewBinding功能?
在项目工程模块的build.gradle中加入以下配置
2.8 如果在Activity的布局中有一个按钮,我们应如何在onCreate中添加按钮的点击监听事件?
(1)在 Activity 中进行延迟初始化的 binding。首先,确保在 build.gradle 文件中启用 viewBinding 选项,然后在 Activity 的类中声明一个成员变量来持有生成的绑定类实例。
(2)在 onCreate 方法中进行绑定初始化:
(3)设置布局管理器,在这里可以设置布局
(4)添加按钮的点击监听事件:一旦布局文件中的按钮被加载,可以直接通过 binding 对象引用该按钮,并为其添加点击监听事件
2.9 在RecyclerView的Adapter中,我们可以在ViewHolder内置类中传入item布局的binding。
由于是动态创建,所以pojo类对应着数据;而viewholder对应着布局中的组件。
相关文章:
【移动应用开发】界面设计(二)实现水果列表页面
续上一篇博客 【移动应用开发】界面设计(一)实现登录页面-CSDN博客 目录 一、采用ViewBinding实现一个RecyclerView 1.1 在app/build.gradle中添加recyclerview依赖,并打开viewBinding (1)在app/build.gradle中添加…...
基于Multisim的四人智力竞赛抢答器设计与仿真
1)设计任务 设计一台可供 4 名选手参加比赛的智力竞赛抢答器。 用数字显示抢答倒计时间,由“9”倒计到“0”时,无人抢答,蜂鸣器连续响 1 秒。选手抢答时,数码显示选手组号,同时蜂鸣器响 1 秒,倒…...
前端学习---(4)js基础-2
事件: 事件的三要素:事件源、事件、事件驱动程序。 事件处理步骤: (1)获取事件源:document.getElementById(“box”); // 类似于Android里面的findViewById (2)绑定事件: 事件源box.事件onclick…...
重生之“我打数据结构,真的假的?”--3.栈和队列(无习题)
栈和队列 C语言中的栈和队列总结 在C语言中,**栈(Stack)和队列(Queue)**是两种非常重要的数据结构。它们广泛用于各种应用中,比如内存管理、任务调度、表达式求值等。本文将对这两种数据结构进行详细的介…...
《Python游戏编程入门》注-第2章2
《Python游戏编程入门》的“2.2.5 绘制线条”中提到了通过pygame库绘制线条的方法。 1 相关函数介绍 通过pygame.draw模块中的line()函数来绘制线条,该函数的格式如下所示。 line(surface, color, start_pos, end_pos, width1) -> Rect 其中,第一…...
PoissonRecon学习笔记
1. Screened Poisson Reconstruction (SPR) 源码:https://github.com/mkazhdan/PoissonRecon However, as noted by several researchers, it suffers from a tendency to over-smooth the data. 泊松重建存在过度平滑的现象。 方法:position and gradi…...
腾讯云DBA面试(一面)
摘要:腾讯云前端时间约了个了维护工程师的面试,总结下面试题。 1、oracle索引原理和mysql索引原理的区别,性能差异?b tree 和 b+ tree 区别。 (1) B+树改进了B树, 让非叶子结点只作索引使用, 去掉了其中指向data record的指针, 使得每个结点中能够存放更多的key, 因此能有更…...
Python:背景知识及环境安装
一、计算机的基础概念 1.1 什么是计算机? 最早我们有计算器,但是他只能完成算数运算的功能 而计算机能完成的工作有: (1)算术运算 (2)逻辑判断 (3)数据存储 (…...
力扣第420周赛 中等 3324. 出现在屏幕上的字符串序列
文章目录 题目介绍题解 题目介绍 题解 因为是要求按键次数最少,所以不用考虑 ‘z’ 变为 ‘a’ 的情况。 代码如下: class Solution {public List<String> stringSequence(String target) {List<String> ans new ArrayList<>();St…...
ant design vue树选择器实现部分层级禁用(指定层级或依据字段判断)
1、依据字段判断是否禁用 const handData (array, level?) > {array.forEach((item) > {if (level 0) {//获取一级菜单item.title item.levelName;item.value item.code;if (item.type LAYER) {item.disabled true;} else if (item.type JOB) {item.disabled f…...
安灯系统助力汽车零部件工厂快速解决生产异常
在汽车零部件制造领域,高效的生产管理和快速解决异常情况是确保产品质量和生产进度的关键。而安灯系统的应用,正为汽车零部件工厂带来了全新的变革,助力其快速解决生产异常。 汽车零部件工厂的生产报工产线看板直观地反映出生产的各项关键数据…...
vue父子传参的方式——Prop
Prop 每一个组件都有一个props的属性,用来接收外部传递的数据 这里我拿一个分页组件为例: 一、基础语法 1、父组件传递数据 父组件在向子组件传递数据时,基础语法如下: <template><div><common-page :pagina…...
Apache Commons Text 指南:比 String 更强大的文本处理工具
Apache Commons Text 指南:比 String 更强大的文本处理工具 在 Java 开发中,String 类是处理文本的基础工具,但当面对复杂的文本处理需求时,其局限性就显而易见了。Apache Commons Text 提供了一个更加灵活强大的文本处理工具集&…...
C++面向对象编程学习
C面向对象编程学习 前言一、C面向对象编程二、知识点学习1. 定义一个类1.1 使用struct定义1.2 使用class定义1.3 struct和class的区别 2. 类的定义方式2.1 单文件定义(Inline Definition)2.2 分离定义(Separate Definition)2.3 头…...
云轴科技ZStack亮相迪拜GITEX大会,与阿里云再次携手深化海外合作
10月14至18日,全球顶尖科技盛会GITEX GLOBAL 2024在迪拜拉开帷幕,云轴科技ZStack携全系云计算解决方案与全新AIOS智塔平台参展,向全球观众展示智算时代下的新一代智算化算力平台。 GITEX GLOBAL 2024是当今世界上最具前瞻性兼包容性的大型科技…...
SQL Server 当前日期及其未来三天的日期
当前日期及其未来三天的日期,并分别以 YYYY-MM-DD 和 yyyyMMdd 的格式展示 1、当前日期及其未来三天的日期,以 YYYY-MM-DD的格式展示 WITH CurrentDate AS (SELECT GETDATE() AS 当前日期 ) -- 使用 CONVERT 函数 SELECTCONVERT(VARCHAR(10), 当前日期,…...
QUIC(Quick UDP Internet Connections)与 RTMP(Real Time Messaging Protocol)
QUIC(Quick UDP Internet Connections)和 RTMP(Real Time Messaging Protocol)是两种不同的网络传输协议,它们在一些方面有不同的特点和应用场景。 QUIC 协议 特点 基于 UDP:QUIC 建立在 UDP 之上ÿ…...
双十一送你一份购物攻略,绿联NAS DXP2800评测
一年一度双十一,今年双十一来得特别早,所以最近已经看到不少人在讨论双十一买了啥,NAS的讨论度也挺高的。正好,是我比较懂的领域。作为一位资深的数码爱好者,同时也是绿联DH2600DXP2800双持用户,可以说我是…...
基于vue框架的的高校设备信息管理系统的设计与实现tx6d7(程序+源码+数据库+调试部署+开发环境)系统界面在最后面。
系统程序文件列表 项目功能:设备管理员,设备维护员,设备类别,设备,设备入库,设备分发,设备调拨,定期维护,维护任务,设备运行记录 开题报告内容 基于Vue框架的高校设备信息管理系统的设计与实现开题报告 一、项目背景及意义 随着高校教育事业的蓬勃发展ÿ…...
springboot3.x使用@NacosValue无法获取配置信息问题解决
一、问题描述 springboot从2.x升级到3.x后,nacos的依赖包需要改成Spring Cloud的依赖包才能继续使用。升级好以后,首先,确定我的项目是能够连上nacos并且加载到配置信息的,因为数据库等信息都是从nacos加载过来,能够正…...
sql获取时间差
MySQL SELECT TIMESTAMPDIFF(HOUR, 2023-10-01 12:00:00, 2023-10-02 15:30:00) AS hours_difference; PostgreSQL //EXTRACT(EPOCH FROM (2023-10-02 15:30:00::timestamp - 2023-10-01 12:00:00::timestamp)) // 获取的是两个时间相差的秒数,在此基础上除3600获…...
【深入理解Python中的闭包】如何有效使用嵌套函数和状态捕获!
深入理解Python中的闭包:如何有效使用嵌套函数和状态捕获 Python 作为一种动态的编程语言,允许我们用多种方式来设计和构建功能,其中之一就是 闭包(Closure)。闭包是一种强大的特性,可以帮助我们捕获和保持…...
npm配置阿里镜像库教程
为了配置npm使用阿里镜像库,可以按照以下步骤进行操作。这些步骤将帮助你加快包的下载速度,特别是在中国地区,因为阿里镜像库通常比官方npm仓库响应更快。 1. 配置全局镜像 可以通过运行以下命令来将npm的全局镜像配置为阿里镜像࿱…...
Apache JMeter压力测试工具使用
JMeter是Apache组织开发的基于Java的压力测试工具,用于对软件做压力测试。 01 软件下载 下载地址: https://jmeter.apache.org/download_jmeter.cgi 最新版本5.6.2 用浏览器下载发现慢得很,用迅雷下载非常快哟。 02 测试使用 在使用前需要先安装jd…...
前端零基础入门到上班:【Day4】HTML 多媒体与表单深度教程
HTML 多媒体与表单深度教程 **1. HTML 多媒体基础:深入理解 <video> 和 <audio> 标签****1.1 <video> 标签:详细剖析与用法****1.1.1 基础结构与属性详解****1.1.2 视频格式的兼容性与示例****1.1.3 视频控制的实际应用** **1.2 <a…...
原创作品——银行软件产品界面设计
蓝蓝设计团队服务金融类应用界面设计,以沉稳的色调和简洁的线条营造出专业可靠的氛围。特点在于融入了创新的元素增添界面的活力与现代感。细节处理上,注意数据的视觉呈现效果,采用定制化的图表和清晰的排版,确保用户能够快速理解…...
若依RuoYi-Vue 定时任务 速学
1.若依定时任务模块(ruoyi-quartz) 那么从一个简单的入门示例开始,掌握定时任务的使用吧! 2. 入门示例(学会制作一个简单定时任务) 首先打开定时任务模块中的task包,这里已经有一个已经写好的R…...
【pytest学习】pytest.main()
基本用法## pytest.main()函数是用于启动测试运行的入口点。它可以在命令行中直接使用,也可以在脚本中以编程方式调用。 以下是一个简单的示例: import pytest if __name__"__main__":pytest.main()执行当前目录下的所有测试文件 使用pytes…...
设计模式: Pimpl(Pointer to Implementation)
这种设计模式通常被称为 Pimpl(Pointer to Implementation)惯用法,有时也被称为 Cheshire Cat 惯用法。它主要用于隐藏实现细节和减少编译依赖。 例子: DatabaseConnection.h #ifndef DATABASE_CONNECTION_H #define DATABASE_…...
android开发中文网站 android developer
Android 平台 | Platform | Android Developers 在此做个记录...
兰州微网站建设/湖南网站营销推广
安装postfixpostfix是一个快速、易于管理、安全性高的邮件发送服务,可以配合dovecot实现一个完美的邮箱服务器。1、安装postfix [rootlocalhost ~]# rpm -qa | grep postfix[rootlocalhost ]# yum install -y postfixLoaded plugins: fastestmirror, refresh-packag…...
网站的图片水印怎么做/免费平台推广
主要参考文献(资料):[1] 熊杰. 宾馆住宿管理系统的设计[J]. 中国科技博览, 2015(29).[2] 孟小峰, 周龙骧, 王珊. 数据库技术发展趋势[J]. 软件学报, 2004, 15(12).[3] 吕浩音. JSP技术介绍[J]. 陇东学院学报:自然科学版, 2007(2).[4] 张良银. 浅论C/S和B/S体系结构[…...
做文艺文创产品的网站/制作一个网站的全过程
一、数字金额小 1、转账给别人相同的金额 2、选框选中(移动下面那个功能),右键,自由移动,工具箱中的移动,移动到另一个图上 3、调整大小和位置...
东莞专业网站建设/网络seo公司
如何修复Linux I/O写入性能问题使用top和iotop分析Linux写入性能问题,本文将解释如何解决性能问题。 如果你已经使用top和iotop确定存在写入性能问题,那你需要做几件事。首先是服务器的设计。许多服务器都安装在一个巨大的分区里,集成了操作系…...
php做的网站首页是什么文件/南宁网站建设网站推广
sudo apt-get install libpcl-1.7-all libpcl-1.7-all-dev libopenni-dev libopenni-sensor-primesense-dev 参考资料: http://robotica.unileon.es/mediawiki/index.php/PCL/OpenNI_tutorial_1:_Installing_and_testing...
找人做网站不算诈骗罪吗/seo关键词排名优化推荐
我觉得下面文章讲的非常不错,适合nodejs入门学习。 七天学会NodeJS...