繁体   English   中英

Jetpack Compose 相当于 RecyclerView 或 ListView 是什么?

[英]What is the Jetpack Compose equivalent of RecyclerView or ListView?

在 Jetpack Compose 中,如何在仅布置可见项目的同时显示大数据列表,而不是在初始布局过程中组合和布置每个项目? 这类似于View工具包中的RecyclerViewListView

可以使用for循环将Column内的所有组件放置在VerticalScroller ,但这会导致丢帧和大量项目的性能不佳。


注意:这是一个规范的自我回答问题,以抢先/处理类似的问题

相当于成分RecyclerViewListView在Jetpack的撰写是LazyColumn用于垂直列表和LazyRow用于水平列表。 它们仅组成和布置当前可见的项目。

您可以通过将数据格式化为列表并使用@Composable回调传递它来使用它,该回调为列表中的给定项目发出 UI。 例如:

val myData = listOf("Hello,", "world!")
LazyColumn {
    items(myData) { item ->
        Text(text = item)
    }
}
val myData = listOf("Hello,", "world!")
LazyRow { 
    items(myData) { item ->
        Text(text = item)
    }
}

您还可以一次指定单个项目:

LazyColumn {
    item {
        Text("Hello,")
    }
    item {
        Text("world!")
    }
}
LazyRow { 
    item {
        Text("Hello,")
    }
    item {
        Text("world!")
    }
}

还有索引变体,除了提供项目本身之外,还提供集合中的索引:

val myData = listOf("Hello,", "world!")
LazyColumn {
    itemsIndexed(myData) { index, item ->
        Text(text = "Item #$index is $item")
    }
}
val myData = listOf("Hello,", "world!")
LazyRow { 
    itemsIndexed(myData) { index, item ->
        Text(text = "Item #$index is $item")
    }
}

在以前的版本中,这些 API 被称为AdapterListLazyColumnItems / LazyRowItemsLazyColumnFor / LazyRowFor

dev.16 中的更新

  • [ScrollableColumn] 用于垂直滚动列表
  • [ScrollableRow] 用于水平滚动列表

ListCardViewTemplate检查它的实现


你可以得到相同的本质RecyclerViewListView使用JetpackCompose AdapterList是在dev.14预览版改名。

  • [LazyColumnItems]用于垂直滚动列表
  • [LazyRowItems]用于水平滚动列表

检查什么是文档说:

它也被移动到一个lazy子包中并分成两个文件。 另外我重命名了参数:

  1. 数据 -> 项目。 这似乎比原始data更有意义
  2. itemCallback -> itemContent。 这更有意义,我们通常不会在 lambda 名称中使用单词回调,尤其是对于可组合的 lambda

检查如何使用它:

@Composable
fun <T> LazyColumnItems(
  items: List<T>,
  modifier: Modifier = Modifier,
  itemContent: @Composable (T) -> Unit
) {
    LazyItems(items, modifier, itemContent, isVertical = true)
}

在.KT

LazyColumnItems(items = (0..50).toList()) { item ->
    cardViewImplementer(item)
 }

从我的角度来看,如果您的项目布局很复杂,则LazyColumnItemLazyRowItem无法正常工作,因为它卡在列表中,作为与VerticalScroller在这种情况下工作正常的比较。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM