Android開發 - RecyclerView 類詳解

阿俊学JAVA發表於2024-08-02

什麼是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 時需要設定佈局管理器、介面卡和檢視持有者,以便管理和展示資料

相關文章