首页 > 其他分享 >Android开发 - RecyclerView 类详解

Android开发 - RecyclerView 类详解

时间:2024-08-02 19:55:10浏览次数:12  
标签:ViewHolder 视图 列表 详解 import Android RecyclerView view

什么是RecyclerView

  • RecyclerView 是 Android 的一个控件用来展示长列表或网格的内容它比以前的 ListView 更加灵活和高效
    • 列表展示:想象你在手机上浏览一个长长的商品列表或图片网格RecyclerView 就是用来展示这样的内容的控件
    • 高效显示:如果你有一万件商品RecyclerView 不会一次性把所有的商品都加载到内存里,而是只加载屏幕上可见的部分,这样可以节省内存和提高性能

主要涉及的组件

  • RecyclerView容器,用来放置你的列表或网格。它类似于一个显示大集合内容的框架
  • LayoutManager控制内容如何排列在屏幕上。例如,可以是垂直的列表水平的列表、或者网格。常用的有:
    • LinearLayoutManager垂直或水平的单列/行列表
    • GridLayoutManager网格布局,可以显示多列
    • StaggeredGridLayoutManager不规则的瀑布流布局
  • Adapter适配器,提供数据和创建视图。想象你有一张展示不同商品的表格Adapter 就是负责把每一行的商品展示出来
  • ViewHolder视图持有者。它用来缓存每一行的视图,以便提高滚动性能滚动列表时 RecyclerView 不用重新创建每一行的视图,而是复用之前创建的视图

工作原理

  • 视图复用

    • RecyclerView 会复用已经滚出屏幕的视图而不是每次滚动时都重新创建新的视图。这种机制叫做视图回收(View Recycling)
  • 数据绑定

    • 适配器(Adapter)负责将数据绑定到视图上。当 RecyclerView 需要显示新数据时,适配器会负责创建和绑定视图

RecyclerView的使用

  • 假设你要在应用中展示一个商品列表,下面是如何设置 RecyclerView 的步骤:

    • 创建主布局文件activity_main.xml

      <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
          android:layout_width="match_parent"
          android:layout_height="match_parent">
      
          <androidx.recyclerview.widget.RecyclerView
              android:id="@+id/recycler_view"
              android:layout_width="match_parent"
              android:layout_height="match_parent"/>
      </RelativeLayout>
      
    • 创建自定义RecyclerView.Adapter类MyAdapter.java

      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;
      
      // 适配器将使用自定义 MyAdapter 的 ViewHolder 类
      public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> {
      
          private final String[] mData;
      
          public MyAdapter(String[] data) {
              mData = data;
          }
      
          @NonNull
          @Override
          public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
              // 创建一个新视图
              View view = LayoutInflater.from(parent.getContext())
                      .inflate(android.R.layout.simple_list_item_1, parent, false);
              return new ViewHolder(view);
          }
      
          @Override
          public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
              // 绑定数据到视图
              holder.textView.setText(mData[position]);
          }
      
          @Override
          public int getItemCount() {
              // 返回数据项的总数
              return mData.length;
          }
      
          // 视图持有者类
          static class ViewHolder extends RecyclerView.ViewHolder {
              final TextView textView;
      
              ViewHolder(View view) {
                  super(view);
                  textView = view.findViewById(android.R.id.text1);
              }
          }
      }
      
    • 启动类

      import android.os.Bundle;
      import androidx.appcompat.app.AppCompatActivity;
      import androidx.recyclerview.widget.LinearLayoutManager;
      import androidx.recyclerview.widget.RecyclerView;
      
      public class MainActivity extends AppCompatActivity {
      
          @Override
          protected void onCreate(Bundle savedInstanceState) {
              super.onCreate(savedInstanceState);
              setContentView(R.layout.activity_main);
      
              // 获取 RecyclerView 控件
              RecyclerView recyclerView = findViewById(R.id.recycler_view);
      
              // 设置布局管理器(垂直排列)
              recyclerView.setLayoutManager(new LinearLayoutManager(this));
      
              // 设置适配器(提供数据)
              MyAdapter adapter = new MyAdapter(new String[] {"Item 1", "Item 2", "Item 3"});
              recyclerView.setAdapter(adapter);
          }
      }
      

总结

  • RecyclerView 是 Android 中用于高效展示长列表或网格数据的控件。它通过视图回收机制提高性能,提供了灵活的布局管理器,允许开发者自定义数据的展示方式使用 RecyclerView 时需要设置布局管理器、适配器和视图持有者,以便管理和展示数据

标签:ViewHolder,视图,列表,详解,import,Android,RecyclerView,view
From: https://www.cnblogs.com/ajunjava/p/18339506

相关文章

  • 【数据结构算法经典题目刨析(c语言)】判断链表是否有环(图文详解)
    ......
  • Android 11 关于按键拦截/按键事件处理分享
    系统在frameworks/base/services/core/java/com/android/server/policy/PhoneWindowManager.java处理按键事件,不管是物理按键还是SystemUI的nav_bar上的虚拟按键(使用了KeyEvent类中的,比如:KeyEvent.KEYCODE_VOLUME_UP).主要注意的有两个函数:interceptKeyBeforeDispatching......
  • [Java并发]AQS详解之二
    参考资料Java并发之AQS详解一、概述谈到并发,不得不谈ReentrantLock;而谈到ReentrantLock,不得不谈AbstractQueuedSynchronizer(AQS)!类如其名,抽象的队列式的同步器,AQS定义了一套多线程访问共享资源的同步器框架,许多同步类实现都依赖于它,如常用的ReentrantLock/Semaphore/Co......
  • Android 自定义图片拖动、缩放、旋转
    Android图片拖动、缩放、旋转图片拖动定义一个类,继承AppCompatImageViewpublicclassMyImageViewextendsAppCompatImageView{//实现方法publicMyImageView(Contextcontext){this(context,null);}//实现方法publicMyImageView(Cont......
  • Android开发 - (适配器)Adapter类中ArrayObjectAdapter实现类详细解析
    简介用于AndroidTV的Leanback库,用于绑定对象数组到UI组件具体作用ArrayObjectAdapter是RecyclerView和Adapter系列中用于处理列表数据的一种适配器类型,主要用于AndroidTV的Leanback库中的BrowseFragment、DetailFragment和PlaybackOverlayFragment等......
  • 程序员进阶架构知识体系、开发运维工具使用、Java体系知识扩展、前后端分离流程详解、
    场景作为一名开发者,势必经历过从入门到自学、从基础到进阶、从学习到强化的过程。当经历过几年企业级开发的磨炼,再回头看之前的开发过程、成长阶段发现确实是走了好多的弯路。作为一名终身学习的信奉者,秉承持续学习、持续优化的信念。不惜耗费无数个日日夜夜,耗费大量时间精力......
  • 解密编程的八大法宝(三)(附贪心算法、动态规划和字符串匹配算法详解)
    算法题中常见的几大解题方法有以下几种:暴力枚举法(BruteForce):这是最基本的解题方法,直接尝试所有可能的组合或排列来找到答案。这种方法适用于问题规模较小的情况,但在大多数情况下效率不高。贪心算法(GreedyAlgorithm):贪心算法在每一步都选择当前看起来最优的解,希望最终能......
  • Java计算机毕业设计基于Android的自闭症康复训练APP设计与实现(开题报告+源码+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景自闭症,作为一种复杂的神经发育障碍,影响着全球数百万儿童及其家庭。自闭症患者在社交互动、沟通表达及行为模式上常表现出显著困难。随着移动技术的飞......
  • VulnhubAI-web 1.0靶机详解
    项目地址https://www.vulnhub.com/entry/ai-web-1,353/实验过程将下载好的靶机导入到VMware中,设置网络模式为NAT模式,然后开启靶机虚拟机使用nmap进行主机发现,获取靶机IP地址nmap192.168.47.1-254根据对比可知DC-8的一个ip地址为192.168.47.135扫描Ai-Web......
  • 学习Android-2024-08
    学习Android-2024-08-01今天内容没有具体在程序中验证,可能存在问题。明天验证。1.打印日志1.1共5个级别,Log.e、Log.w、Log.i、Log.d、Log.v,重要性依次降低。例如Log.v会看到前面Log.e、Log.w等所有的信息。而Log.e只会看到Log.e的信息。1.2输出时打的tag,利于在控制台进行搜索......