Android开发 - RecyclerView 类长列表与网格视图展示详解

什么是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 时需要设置布局管理器、适配器和视图持有者,以便管理和展示数据
posted @ 2024-08-02 19:56  阿俊学JAVA  阅读(10)  评论(0编辑  收藏  举报