RecyclerView
是 View 元件,可讓您輕鬆有效率地顯示
龐大的資料集您不必為資料集中的每個項目建立資料檢視,
RecyclerView
可讓您縮減一小部分數量,藉此提升應用程式效能
並回收這些事件
在 Compose 中,您可以使用 Lazy 清單完成相同動作。這個頁面
說明如何遷移 RecyclerView
實作以使用 Lazy 清單
。
遷移步驟
如要將 RecyclerView
實作遷移至 Compose,請按照下列步驟操作:
從 UI 階層中對
RecyclerView
加註或移除,並加入 如果階層中仍未顯示任何資訊,可使用ComposeView
替換。這個 是您要新增的 Lazy 清單容器:<FrameLayout 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 />"--> <androidx.compose.ui.platform.ComposeView android:id="@+id/compose_view" android:layout_width="match_parent" android:layout_height="match_parent" /> </FrameLayout>
依據下列項目判斷需要哪種 Lazy 清單可組合項類型
RecyclerView
的版面配置管理工具 (請參閱下表)。您選取的可組合函式 您將是此處新增的ComposeView
的頂層可組合函式 上一個步驟LayoutManager
可組合項目
LinearLayoutManager
LazyColumn
或LazyRow
GridLayoutManager
LazyVerticalGrid
或LazyHorizontalGrid
StaggeredGridLayoutManager
LazyVerticalStaggeredGrid
或LazyHorizontalStaggeredGrid
// recyclerView.layoutManager = LinearLayoutManager(context) composeView.setContent { LazyColumn(Modifier.fillMaxSize()) { // We use a LazyColumn since the layout manager of the RecyclerView is a vertical LinearLayoutManager } }
為每個檢視畫面類型建立對應的可組合函式
RecyclerView.Adapter
實作。每種檢視畫面類型通常會對應至ViewHolder
子類別,但並非一律如此。這些 可組合函式將用來做為不同類型的 UI 表示法 清單中的元素:@Composable fun ListItem(data: MyData, modifier: Modifier = Modifier) { Row(modifier.fillMaxWidth()) { Text(text = data.name) // … other composables required for displaying `data` } }
RecyclerView.Adapter
的onCreateViewHolder()
和 這些可組合項將取代onBindViewHolder()
方法 常態性程序在 Compose 中, 建立項目的可組合項並將資料繫結至該項目,這些概念 以漸進方式處理在 Lazy 清單的
content
位置 (結尾的 lambda 參數) 中 使用items()
函式 (或同等的超載) 反覆執行 然後建立一份清單在itemContent
lambda 中,叫用適當的 可組合資料項目:val data = listOf<MyData>(/* ... */) composeView.setContent { LazyColumn(Modifier.fillMaxSize()) { items(data) { ListItem(it) } } }
常見用途
商品裝飾
RecyclerView
具備 ItemDecoration
的概念,可用來新增
系統特別為清單中的項目繪製出特別的繪圖舉例來說,您可以將
ItemDecoration
可在項目之間加入分隔線:
val itemDecoration = DividerItemDecoration(recyclerView.context, LinearLayoutManager.VERTICAL) recyclerView.addItemDecoration(itemDecoration)
Compose 沒有關於項目裝飾的對等概念。而是
可以直接在組合中將任何 UI 裝飾加入清單中。例如:
如要在清單中新增分隔線,您可以逐一呼叫每個分隔線後面使用 Divider
可組合函式。
項目:
LazyColumn(Modifier.fillMaxSize()) { itemsIndexed(data) { index, d -> ListItem(d) if (index != data.size - 1) { Divider() } } }
項目動畫
您可以在 RecyclerView
上設定 ItemAnimator
,以動畫方式呈現
項目。根據預設,RecyclerView
會使用
DefaultItemAnimator
,提供移除、新增和移除基本動畫
移動事件。
Lazy 清單透過 animateItemPlacement
修飾符具有相同的概念。
詳情請參閱「項目動畫」。
其他資源
如要進一步瞭解如何將 RecyclerView
遷移至 Compose,請參閱
下列資源:
- 清單和格線:說明如何在 。
- Jetpack Compose 互通性:在 RecyclerView 中使用 Compose:
網誌文章:瞭解如何在
RecyclerView
中有效使用 Compose。
為您推薦
- 注意:系統會在 JavaScript 關閉時顯示連結文字
- 清單和格線
- 將
CoordinatorLayout
遷移至 Compose - 其他考量