30s学会RecyclerView创建动态列表

2024-02-11 10:44

本文主要是介绍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}}

这篇关于30s学会RecyclerView创建动态列表的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/699584

相关文章

C#如何动态创建Label,及动态label事件

《C#如何动态创建Label,及动态label事件》:本文主要介绍C#如何动态创建Label,及动态label事件,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录C#如何动态创建Label,及动态label事件第一点:switch中的生成我们的label事件接着,

SpringCloud动态配置注解@RefreshScope与@Component的深度解析

《SpringCloud动态配置注解@RefreshScope与@Component的深度解析》在现代微服务架构中,动态配置管理是一个关键需求,本文将为大家介绍SpringCloud中相关的注解@Re... 目录引言1. @RefreshScope 的作用与原理1.1 什么是 @RefreshScope1.

MyBatis 动态 SQL 优化之标签的实战与技巧(常见用法)

《MyBatis动态SQL优化之标签的实战与技巧(常见用法)》本文通过详细的示例和实际应用场景,介绍了如何有效利用这些标签来优化MyBatis配置,提升开发效率,确保SQL的高效执行和安全性,感... 目录动态SQL详解一、动态SQL的核心概念1.1 什么是动态SQL?1.2 动态SQL的优点1.3 动态S

idea中创建新类时自动添加注释的实现

《idea中创建新类时自动添加注释的实现》在每次使用idea创建一个新类时,过了一段时间发现看不懂这个类是用来干嘛的,为了解决这个问题,我们可以设置在创建一个新类时自动添加注释,帮助我们理解这个类的用... 目录前言:详细操作:步骤一:点击上方的 文件(File),点击&nbmyHIgsp;设置(Setti

Python中DataFrame转列表的最全指南

《Python中DataFrame转列表的最全指南》在Python数据分析中,Pandas的DataFrame是最常用的数据结构之一,本文将为你详解5种主流DataFrame转换为列表的方法,大家可以... 目录引言一、基础转换方法解析1. tolist()直接转换法2. values.tolist()矩阵

Spring 中使用反射创建 Bean 实例的几种方式

《Spring中使用反射创建Bean实例的几种方式》文章介绍了在Spring框架中如何使用反射来创建Bean实例,包括使用Class.newInstance()、Constructor.newI... 目录1. 使用 Class.newInstance() (仅限无参构造函数):2. 使用 Construc

Android App安装列表获取方法(实践方案)

《AndroidApp安装列表获取方法(实践方案)》文章介绍了Android11及以上版本获取应用列表的方案调整,包括权限配置、白名单配置和action配置三种方式,并提供了相应的Java和Kotl... 目录前言实现方案         方案概述一、 androidManifest 三种配置方式

python展开嵌套列表的多种方法

《python展开嵌套列表的多种方法》本文主要介绍了python展开嵌套列表的多种方法,包括for循环、列表推导式和sum函数三种方法,具有一定的参考价值,感兴趣的可以了解一下... 目录一、嵌套列表格式二、嵌套列表展开方法(一)for循环(1)for循环+append()(2)for循环+pyPhWiFd

Python容器类型之列表/字典/元组/集合方式

《Python容器类型之列表/字典/元组/集合方式》:本文主要介绍Python容器类型之列表/字典/元组/集合方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1. 列表(List) - 有序可变序列1.1 基本特性1.2 核心操作1.3 应用场景2. 字典(D

mybatis-plus 实现查询表名动态修改的示例代码

《mybatis-plus实现查询表名动态修改的示例代码》通过MyBatis-Plus实现表名的动态替换,根据配置或入参选择不同的表,本文主要介绍了mybatis-plus实现查询表名动态修改的示... 目录实现数据库初始化依赖包配置读取类设置 myBATis-plus 插件测试通过 mybatis-plu