Android 使用 RecyclerView 创建动态列表

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)

    <?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

    • 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
  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是使用 RecyclerView 创建垂直列表的示例代码: 1. 首先,在布局文件中添加 RecyclerView 组件: ```xml <androidx.recyclerview.widget.RecyclerView android:id="@+id/recycler_view" android:layout_width="match_parent" android:layout_height="match_parent" /> ``` 2. 在 Activity 或 Fragment 中,初始化 RecyclerView 并设置其布局管理器和适配器: ```java // 初始化 RecyclerView RecyclerView recyclerView = findViewById(R.id.recycler_view); // 设置布局管理器 recyclerView.setLayoutManager(new LinearLayoutManager(this)); // 设置适配器 recyclerView.setAdapter(adapter); ``` 其中,`LinearLayoutManager` 是 RecyclerView 的默认布局管理器,用于创建垂直列表。`adapter` 是您自己实现的 RecyclerView.Adapter 子类,用于提供数据和创建列表项视图。 3. 实现 RecyclerView.Adapter 子类: ```java public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> { private List<String> mData; public MyAdapter(List<String> data) { mData = data; } @Override public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view = LayoutInflater.from(parent.getContext()) .inflate(R.layout.item_layout, parent, false); return new ViewHolder(view); } @Override public void onBindViewHolder(ViewHolder holder, int position) { String item = mData.get(position); holder.mTextView.setText(item); } @Override public int getItemCount() { return mData.size(); } public static class ViewHolder extends RecyclerView.ViewHolder { public TextView mTextView; public ViewHolder(View itemView) { super(itemView); mTextView = itemView.findViewById(R.id.text_view); } } } ``` 其中,`onCreateViewHolder` 方法用于创建 ViewHolder 对象,`onBindViewHolder` 方法用于绑定数据到 ViewHolder 中,`getItemCount` 方法用于返回数据集合的大小。 4. 创建列表项布局文件 item_layout.xml: ```xml <TextView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/text_view" android:layout_width="match_parent" android:layout_height="wrap_content" android:padding="16dp" /> ``` 这个布局文件只包含一个 TextView 组件,用于显示列表项的文本内容。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值