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