30s学会RecyclerView创建动态列表

详细学习请参考官网

使用 RecyclerView 创建动态列表  |  Android 开发者  |  Android Developers (google.cn)

1.RecyclerView定义及其构造

少废话,就是一个视图控件,就像你刷小红书,东一块西一块很丝滑地滑动 就是 RecyclerView

如下图:

构造结构

ViewHolder:     是RecyclerView中View的封装容器【定义在Adapter里,为内部类】

Adapter:        关联于ViewHolder,为Adapter解析ViewGroup,最后绑定各View与数据

 2.实现RecyclerView的步骤

1.利用RecycleView的标准布局器创建布局

2.创建Adapter类,内部创建ViewHolder类,在ViewHolder实现  设计时每个元素功能

3.重写三大方法:onCreateViewHolder()——》创建ViewHolder并初始化ViewHolder和View

                            onBindViewHolder()——》ViewHolder与data相关联

                            getItemCount()——》获取数据集的大小

例如xml布局:

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="@dimen/list_item_height"android:layout_marginLeft="@dimen/margin_medium"android:layout_marginRight="@dimen/margin_medium"android:gravity="center_vertical"><TextViewandroid:id="@+id/textView"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="@string/element_text"/>
</FrameLayout>

以下为最基本实现Adapter的逻辑


class CustomAdapter(private val dataSet: Array<String>) :RecyclerView.Adapter<CustomAdapter.ViewHolder>() {class ViewHolder(view: View) : RecyclerView.ViewHolder(view) {val textView: TextViewinit {  textView = view.findViewById(R.id.textView)}}override fun onCreateViewHolder(viewGroup: ViewGroup, viewType: Int): ViewHolder {val view = LayoutInflater.from(viewGroup.context).inflate(R.layout.text_row_item, viewGroup, false)return ViewHolder(view)}override fun onBindViewHolder(viewHolder: ViewHolder, position: Int) {viewHolder.textView.text = dataSet[position]}override fun getItemCount() = dataSet.size}

3.规划RecyclerView的UI布局

RecyclerView 中的列表项由 LayoutManager 类负责排列。RecyclerView 库提供了三种布局管理器,用于处理最常见的布局情况:

  • LinearLayoutManager 将各个项排列在一维列表中。
  • GridLayoutManager 将各项内容排列在二维网格中:
    • 如果网格垂直排列,GridLayoutManager 会尽量使每行中所有元素的宽度和高度相同,但不同的行可以有不同的高度。
    • 如果网格水平排列,GridLayoutManager 会尽量使每列中所有元素的宽度和高度相同,但不同的列可以有不同的宽度。
  • StaggeredGridLayoutManager 与 GridLayoutManager 类似,但不要求同一行中的列表项具有相同的高度(垂直网格有此要求)或同一列中的列表项具有相同的宽度(水平网格有此要求)。其结果是,同一行或同一列中的列表项可能会错落不齐。

我讲人话 

LinearLayoutMananger 即是单行或单列滑动

GridLayoutManager 排列为horizontal时每列元素一致大小

                                ​​​​​​​        为vertical时每行元素一致大小

StaggeredGridLayoutManger就是一个瀑布屏,各个元素错落排开,大小不一

如小红书为瀑布布局

4.使用RecyclerView

从Room或者本地传入 data,实例化对应的Adapter,保存xml里的RecyclerView对象,将我们的Adapter对象交给RecyclerView对象即可

代码如下


class MainActivity : AppCompatActivity() {override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContentView(R.layout.activity_main)val dataset = arrayOf("January", "February", "March")val customAdapter = CustomAdapter(dataset)val recyclerView: RecyclerView = findViewById(R.id.recycler_view)recyclerView.adapter = customAdapter}}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/464854.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

无心剑中译狄金森《你无法扑灭一场火》

You Cannot Put a Fire Out — 你无法扑灭一场火 Emily Dickinson 艾米莉狄金森 You cannot put a Fire out — A Thing that can ignite Can go, itself, without a Fan — Upon the slowest Night — 你无法扑灭一场火 一种东西&#xff0c;无需风扇 能在最舒缓悠长的夜…

go 语言爬虫库goquery介绍

文章目录 爬虫介绍goquery介绍利用NewDocumentFromReader方法获取主页信息Document介绍通过查询获取文章信息css选择器介绍goquery中的选择器获取主页中的文章链接 爬取总结 爬虫介绍 爬虫&#xff0c;又称网页抓取、网络蜘蛛或网络爬虫&#xff0c;是一种自动浏览互联网并从网…

leetcode(矩阵)74. 搜索二维矩阵(C++详细解释)DAY7

文章目录 1.题目示例提示 2.解答思路3.实现代码结果 4.总结 1.题目 给你一个满足下述两条属性的 m x n 整数矩阵&#xff1a; 每行中的整数从左到右按非严格递增顺序排列。每行的第一个整数大于前一行的最后一个整数。 给你一个整数 target &#xff0c;如果 target 在矩阵中…

【计算几何】给定一组点的多边形面积

目录 一、说明二、有序顶点集三、无序顶点集3.1 凸多边形3.2 非凸多边形 四、结论 ​ 一、说明 计算多边形面积的方法有很多种。众所周知的多边形&#xff08;如三角形、矩形、正方形、梯形等&#xff09;的面积可以使用简单的数学公式计算。在这篇文章中&#xff0c;我将讨论…

Mysql Day04

mysql体系结构 连接层服务层引擎层&#xff08;索引&#xff09;存储层 存储引擎 存储引擎是基于表建立的&#xff0c;默认是innoDB show create table tb; 查看当前数据库支持的存储引擎 show engines; InnoDB 特点 DML&#xff08;数据增删改&#xff09;遵循ACID模…

重温阿里云宝塔面板部署前后端项目

首先祝大家新年快乐啊&#xff01; 回到老家&#xff0c;便打算趁这一段空闲时间提升一下自己&#xff0c;重点是学习实践一下echarts相关内容&#xff0c;很多公司项目都需要实现可视化&#xff0c;所以在bilibili上找了黑马的一个教程开始学习&#xff0c;不同的是&#xff…

【CTFshow】VIP题目限免 通关

&#x1f36c; 博主介绍&#x1f468;‍&#x1f393; 博主介绍&#xff1a;大家好&#xff0c;我是 hacker-routing &#xff0c;很高兴认识大家~ ✨主攻领域&#xff1a;【渗透领域】【应急响应】 【python】 【VulnHub靶场复现】【面试分析】 &#x1f389;点赞➕评论➕收藏…

【java基础题型】录入3位数,求每一位是?

\t 制表符&#xff0c;用于整到8个格子 Scanner类&#xff0c;导入Scanner包(1),代码里导入Scanner类写录入&#xff0c;调用录入的对象的方法 通用求个位数&#xff0c;%10即可&#xff0c;余数不会小于除数 package java录入3位数;import java.util.Scanner; …

CC++内存管理

1、C&C++内存分布 如上代码中各变量的存储区域。 1. 栈又叫堆栈--非静态局部变量/函数参数/返回值等等,栈是向下增长的。 2. 内存映射段是高效的I/O映射方式,用于装载一个共享的动态内存库。用户可使用系统接口 创建共享共享内存,做进程间通信。 3. 堆用于程序运行时动态…

静态时序分析:建立时间分析

静态时序分析https://blog.csdn.net/weixin_45791458/category_12567571.html?spm1001.2014.3001.5482 在静态时序分析中&#xff0c;建立时间检查约束了触发器时钟引脚&#xff08;时钟路径&#xff09;和输入数据引脚&#xff08;数据路径&#xff09;之间的时序关系&#x…

《21天精通IPv4 to IPv6》第3天:IPv6地址配置——如何为不同的系统配置IPv6?

博主猫头虎的技术世界 &#x1f31f; 欢迎来到猫头虎的博客 — 探索技术的无限可能&#xff01; 专栏链接&#xff1a; &#x1f517; 精选专栏&#xff1a; 《面试题大全》 — 面试准备的宝典&#xff01;《IDEA开发秘籍》 — 提升你的IDEA技能&#xff01;《100天精通鸿蒙》 …

实现自定义标记

实现自定义标记 问题陈述 New Tech Book的高级管理层决定在其用JSP设计的应用程序的所有页面上显示版权信息。它们还要去如何向应用程序中添加JSP页面,可以重用显示版本信息的代码。公司的软件开发人员Jerry Smith决定用自定义标记来创建应用程序的这一部分。 解决方案 要解…