RecyclerView
是一个 View 组件,可让您轻松高效地显示
大型数据集。您无需为数据集中的每个项目创建视图,
RecyclerView
可通过保留一个小池
并且在您滚动浏览这些项目时再循环浏览这些项目。
在 Compose 中,您可以使用延迟列表来完成相同的操作。本页介绍了如何迁移 RecyclerView
实现,以便在 Compose 中使用延迟列表。
迁移步骤
如需将 RecyclerView
实现迁移到 Compose,请按以下步骤操作:
从界面层次结构中注释掉或移除
RecyclerView
,并添加ComposeView
来替换它(如果层次结构中尚无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>
根据
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
子类,但情况并不总是如此。这些 可组合项将用作不同类型 元素:@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 中, 为某个项创建可组合项并将数据绑定到该可组合项,这些概念 已合并。在延迟列表的
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 没有等效的项装饰的概念。不过,您可以直接在组合中添加列表中的任何界面装饰。例如:
要向列表中添加分隔线,您可以在每项内容后使用 Divider
可组合项
商品:
LazyColumn(Modifier.fillMaxSize()) { itemsIndexed(data) { index, d -> ListItem(d) if (index != data.size - 1) { HorizontalDivider() } } }
项动画
您可以在 RecyclerView
上设置 ItemAnimator
,以便在对适配器进行更改时为项添加动画效果。默认情况下,RecyclerView
会使用
DefaultItemAnimator
,用于在移除、添加和添加操作时提供基本动画
移动事件。
延迟列表通过 animateItemPlacement
修饰符有类似的概念。
如需了解详情,请参阅项动画。
其他资源
如需详细了解如何将 RecyclerView
迁移到 Compose,请参阅以下资源:
- 列表和网格:关于如何在 Google Cloud 中实现列表和网格的文档 写邮件。
- Jetpack Compose 互操作性:在 RecyclerView 中使用 Compose:介绍如何在
RecyclerView
中高效使用 Compose 的博文。
为您推荐
- 注意:当 JavaScript 处于关闭状态时,系统会显示链接文字
- 列表和网格
- 将
CoordinatorLayout
迁移到 Compose - 其他注意事项