Android 使用 RecyclerView 创建动态列表
记录一下学习过程,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)文章来源:https://www.toymoban.com/news/detail-426962.html
<?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模板网!