Android 使用 RecyclerView 创建动态列表

这篇具有很好参考价值的文章主要介绍了Android 使用 RecyclerView 创建动态列表。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Android 使用 RecyclerView 创建动态列表

记录一下学习过程,RecyclerView 创建动态列表效果如下:
Android 使用 RecyclerView 创建动态列表

  • Recyclerview 认识

    • Recyclerview 库:
    • Recyclerview 指南:
    • RecyclerView 可以显示大型数据集,通过回收有限数量的视图可以有效地滚动这些数据集,同时最大限度减少内存用量。 在实例化 ViewHolder 视图时可以定义单击侦听器。
    • RecyclerView 库会根据需要动态创建元素。顾名思义,RecyclerView 会回收这些单个的元素。当列表项滚动出屏幕时,RecyclerView 不会销毁其视图。相反,RecyclerView 会对屏幕上滚动的新列表项重用该视图。这种重用可以显著提高性能,改善应用响应能力并降低功耗。
  • 使用:在应用或模块的 build.gradle 文件中添加所需工件的依赖项:

    dependencies {
         
      implementation "androidx.recyclerview:recyclerview:1.2.1"
    }
    
  • 第二步:定义页面布局 (activity_out_in.xml)

      <?xml version="1.0" encoding="utf-8"?>
      <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
          xmlns:app="http://schemas.android.com/apk/res-auto"
          xmlns:tools="http://schemas.android.com/tools"
          android:layout_width="match_parent"
          android:layout_height="match_parent"
          tools:context=".ui.warehouse.OutInActivity">
          <!-- 省略其他布局内容 ,保留 RecyclerView -->
          <!-- 标题 -->
          <!-- 条件查询部分 -->
          <!-- 内容   -->
          <androidx.recyclerview.widget.RecyclerView
              android:id="@+id/OutIn_page_recyclerview"
              android:layout_width="0dp"
              android:layout_height="0dp"
              app:layout_constraintBottom_toBottomOf="parent"
              app:layout_constraintEnd_toEndOf="parent"
              app:layout_constraintStart_toStartOf="parent"
              app:layout_constraintTop_toBottomOf="@id/card_OutIn_page_query" />
      </androidx.constraintlayout.widget.ConstraintLayout>
    
  • 第三步:定义RecyclerView每一项(Item)页面(recyclerview_ware_item.xml)

    <?xml version="1.0" encoding="utf-8"?>
    <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
    
        <androidx.cardview.widget.CardView
            android:id="@+id/ware_card"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginLeft="@dimen/f_mp_10_lr"
            android:layout_marginTop="5dp"
            android:layout_marginRight="@dimen/f_mp_10_lr"
            android:layout_marginBottom="5dp"
            app:cardCornerRadius="5dp"
            app:cardElevation="5dp"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent">
    
            <androidx.constraintlayout.widget.ConstraintLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:padding="@dimen/f_mp_20_lr">
              <!-- 通过预设尺寸,指定文字大小。注意: layout_height、layout_width这两个属性,不同的用法有意想不到的惊喜 -->
              <!-- app:autoSizeText 属性设置为 none 或 uniform。none 是默认值,而 uniform 可让 TextView 在水平和垂直轴上均匀缩放。 -->
              <!-- app:autoSizePresetSizes="@array/auto_size_text_sizes" 属性设置为预设尺寸数组。如要将该数组作为资源来访问,请在 res/values/arrays.xml 文件中定义该数组。 -->
                <TextView
                    android:id="@+id/tvIt_material_name"
                    android:layout_width="wrap_content"
                    android:layout_height="25dp"
                    android:gravity="center|left"
                    android:maxWidth="220dp"
                    android:minWidth="160dp"
                    android:text="物品测试的测试测试"
                    app:autoSizePresetSizes="@array/auto_size_text_sizes"
                    app:autoSizeTextType="uniform"
                    app:layout_constraintStart_toStartOf="parent"
                    app:layout_constraintTop_toTopOf="parent" />
                <TextView
                    android:id="@+id/tvIt_number_name"
                    android:layout_width="60dp"
                    android:layout_height="25dp"
                    android:gravity="center|left"
                    android:text="出库数量:"
                    app:autoSizePresetSizes="@array/auto_size_text_sizes"
                    app:autoSizeTextType="uniform"
                    app:layout_constraintEnd_toStartOf="@+id/tvIT_unit_num"
                    app:layout_constraintTop_toTopOf="parent" />
                <TextView
                    android:id="@+id/tvIT_unit_num"
                    android:layout_width="55dp"
                    android:layout_height="25dp"
                    android:gravity="center|right"
                    android:text="1008/只"
                    app:autoSizePresetSizes="@array/auto_size_text_sizes"
                    app:autoSizeTextType="uniform"
                    app:layout_constraintEnd_toEndOf="parent"
                    app:layout_constraintTop_toTopOf="parent" />
                <TextView
                    android:id="@+id/tvIT_date_name"
                    android:layout_width="60dp"
                    android:layout_height="25dp"
                    android:layout_marginTop="5dp"
                    android:gravity="center|left"
                    android:text="出库日期:"
                    app:autoSizePresetSizes="@array/auto_size_text_sizes"
                    app:autoSizeTextType="uniform"
                    app:layout_constraintStart_toStartOf="parent"
                    app:layout_constraintTop_toBottomOf="@+id/tvIt_material_name" />
                <TextView
                    android:id="@+id/tvIT_date"
                    android:layout_width="wrap_content"
                    android:layout_height="25dp"
                    android:layout_marginTop="5dp"
                    android:layout_marginBottom="5dp"
                    android:gravity="center"
                    android:text="2022-10-11"
                    app:layout_constraintStart_toEndOf="@+id/tvIT_date_name"
                    app:layout_constraintTop_toBottomOf="@+id/tvIt_material_name" />
                <TextView
                    android:id="@+id/tvIT_ware_status_name"
                    android:layout_width="60dp"
                    android:layout_height="25dp"
                    android:layout_marginTop="5dp"
                    android:gravity="center|left"
                    android:text="出库状态:"
                    app:autoSizePresetSizes="@array/auto_size_text_sizes"
                    app:autoSizeTextType="uniform"
                    app:layout_constraintEnd_toStartOf="@+id/tvIT_ware_status"
                    app:layout_constraintTop_toBottomOf="@+id/tvIt_number_name" />
                <TextView
                    android:id="@+id/tvIT_ware_status"
                    android:layout_width="55dp"
                    android:layout_height="25dp"
                    android:layout_marginTop="5dp"
                    android:gravity="center"
                    android:text="销售"
                    app:autoSizePresetSizes="@array/auto_Item_size"
                    app:autoSizeTextType="uniform"
                    app:layout_constraintEnd_toEndOf="parent"
                    app:layout_constraintTop_toBottomOf="@+id/tvIT_unit_num" />
            </androidx.constraintlayout.widget.ConstraintLayout>
            <TextView
                android:id="@+id/tvIT_ware_out_in"
                android:layout_width="50dp"
                android:layout_height="wrap_content"
                android:layout_gravity="right"
                android:layout_marginTop="6dp"
                android:background="@color/blue"
                android:gravity="center"
                android:paddingLeft="5dp"
                android:paddingRight="5dp"
                android:rotation="45"
                android:text="出库"
                android:textColor="@color/white"
                android:textSize="10sp"
                android:translationX="12dp"
                android:translationZ="@dimen/f_mp_10_lr"
                app:layout_constraintEnd_toEndOf="parent"
                app:layout_constraintTop_toTopOf="parent" />
        </androidx.cardview.widget.CardView>
    </androidx.constraintlayout.widget.ConstraintLayout>
    
  • 第四步 :创建RecyclerView适配器 ,实现 Adapter 和 ViewHolder文章来源地址https://www.toymoban.com/news/detail-426962.html

    • ViewHolder 是包含列表中各列表项的布局的 View 的封装容器。Adapter 会根据需要创建 ViewHolder 对象,还会为这些视图设置数据。将视图与其数据相关联的过程称为“绑定”。
    • 定义 Adapter,需要重写以下三个方法
      • onCreateViewHolder():每当 RecyclerView 需要创建新的 ViewHolder 时,它都会调用此方法。此方法会创建并初始化 ViewHolder 及其关联的 View,但不会填充视图的内容,因为 ViewHolder 此时尚未绑定到具体数据。
      • onBindViewHolder():RecyclerView 调用此方法将 ViewHolder 与数据相关联。此方法会提取适当的数据,并使用该数据填充 ViewHolder 的布局。
      • getItemCount():RecyclerView 调用此方法来获取数据集的大小。
        //数据源 实体类对象
        public class TestData {
             
          private int testId;
          private String testName;
          private String testNum;
          private String testDate;
          private String testStatus;
          private String testOutIn;
          //构造方法 。getter 和 setter 方法省略不写(不展示出来)
        }
      
        import android.content.Context;
        import android.view.LayoutInflater;
        import android.view.View;
        import android.view.ViewGroup;
        import android.widget.TextView;
        import androidx.annotation.NonNull;
        import androidx.recyclerview.widget.RecyclerView;
        import java.util.List;
        //部分涉及 项目包名 导入(没写出来)
        //创建 RecyclerView 适配器 。继承于RecyclerView.Adapter<VH>,其中VH是我们创建的一个继承于RecyclerView.ViewHolder的静态内部类
        public class WareRecyclerViewAdapter extends RecyclerView.Adapter<WareRecyclerViewAdapter.myView> {
             
          private List<TestData> dataList; // 数据源
          private Context context;//上下文
          private myIt

到了这里,关于Android 使用 RecyclerView 创建动态列表的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Android 仿快手视频列表,RecyclerView与Banner联动效果

    这是看到群里讨论过快手APP的一个观看他人视频列表的一个联动效果,但是并不是完全按照这个软件的效果来做的,只是参考,并不是完全仿照这个软件来做的,没时间去优化排版问题了,请见谅,如图: 实现效果如下: 效果视频:仿快手视频列表互动效果-CSDN直播  1.主函

    2024年01月18日
    浏览(44)
  • 【Android】RecyclerView实现列表中的Item之间设置间距的一种方式

    RecyclerView 的 Item 默认没有间距是因为 RecyclerView 是一个高度自定义的控件,它的目标是提供一个高效灵活的列表展示,并且适应各种不同的布局需求。 为了让开发者能够充分自定义列表项的布局和样式,RecyclerView 没有默认设置项来添加 item 之间的间距。这样设计的好处是,

    2024年02月13日
    浏览(53)
  • 使用RecyclerView构建灵活的列表界面

    在现代移动应用中,列表界面是最常见的用户界面之一,它能够展示大量的数据,让用户可以浏览和操作。无论是社交媒体的动态流、商品展示、新闻列表还是任务清单,列表界面都扮演着不可或缺的角色。在构建这些界面时,开发者需要考虑到性能、交互和用户体验等方面

    2024年02月14日
    浏览(50)
  • Android开发—RecyclerView使用

    RecyclerView 在Android中用于创建列表。 官网的解释为: RecyclerView 可以让您轻松高效地显示大量数据。您提供数据并定义每个列表项的外观,而 RecyclerView 库会根据需要动态创建元素。 当RecyclerView的列表项滚出屏幕的时候,RecyclerView不会销毁该视图,相反而是将这些视图复用到

    2024年02月16日
    浏览(73)
  • Android RecyclerView使用简述

      RecyclerView是Android中非常受欢迎的控件,RecyclerView是官方在Android5.0之后新添加的控件,推出用来替代传统的ListView和GridView列表控件,所以如果你还在使用ListView的话可以替换为RecyclerView了。 文章的功能可以先运行看看效果,APK下载   对于RecyclerView的使用根据实际项目进

    2023年04月08日
    浏览(88)
  • 【Android笔记97】Android之RecyclerView使用GridLayoutManager网格布局

    这篇文章,主要介绍Android之RecyclerView使用GridLayoutManager网格布局。 目录 一、GridLayoutManager网格布局 1.1、功能效果 1.2、案例代码 (1)创建网格布局

    2024年02月15日
    浏览(40)
  • 【Android】BaseQuickAdapter使用(RecyclerView万能适配器)

    RecyclerView是Android用于取代ListView的SDK,它的灵活性和可替代性都比ListView更好,但RecyclerView也存在一些问题: 高度不能自适应、最后一个 Item 显示不全被遮挡等。而无论ListView还是RecyclerView都必不可少地会使用到适配器,其配置比较繁琐。 BaseQuickAdapter 可以对繁琐的适配器进

    2024年02月06日
    浏览(83)
  • 解决Android中使用RecyclerView滑动时底部item显示不全的问题

    感觉这个bug是不是因人而异啊,找了很多文章都没能解决我的问题,包括在RecyclerView上在嵌套上一层RelativeLayout,添加属性android:descendantFocusability=”blocksDescendants”,使用ConstraintLayout布局包裹RecyclerView,再设置layout_height=\\\"0dp\\\"和layout_constraintBottom_toBottomOf=\\\"parent\\\"(就是指定约束

    2024年02月16日
    浏览(42)
  • Android入门第64天-MVVM下瀑布流界面的完美实现-使用RecyclerView

            网上充满着不完善的基于RecyclerView的瀑布流实现, 要么 根本是错的、 要么 就是只知其一不知其二、 要么 就是一充诉了一堆无用代码、要么用的是古老的MVC设计模式。         一个真正的、用户体验类似于淘宝、抖音的瀑布流怎么实现目前基本为无解。因为本

    2024年02月02日
    浏览(50)
  • RecyclerView 滑动布局源码分析:带你深入掌握列表滑动机制

    作者:maxcion 现在 RV 已经初始化好了,那当我们进行滑动交互时代码又是如何执行的呢? RV 优秀就优秀在他是动态布局的,与 ScrollView 不同在于: ScrollView 是初始化时将所有child都 inflate 并 add 而 RV 是只 inflate 屏幕展示得下的child. 如果我们有100个child: ScrollView 便会在初始化时就

    2023年04月23日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包