Android 如何在Compose Jetpack中创建回收器视图?
在Compose Jetpack中是否有创建recyclerView的特殊方法?或者与往常一样?在Android 如何在Compose Jetpack中创建回收器视图?,android,android-recyclerview,android-jetpack-compose,android-jetpack-compose-list,android-compose-lazyfor,Android,Android Recyclerview,Android Jetpack Compose,Android Jetpack Compose List,Android Compose Lazyfor,在Compose Jetpack中是否有创建recyclerView的特殊方法?或者与往常一样?在jetnews列表/recyclerview的示例项目中,他们将垂直滚动条与列一起使用,并使用forEach填充@Composable函数下面的项 @Composable private fun TabWithTopics(tabname: String, topics: List<String>) { VerticalScroller { Column {
jetnews
列表/recyclerview的示例项目中,他们将垂直滚动条
与列
一起使用,并使用forEach
填充@Composable
函数下面的项
@Composable
private fun TabWithTopics(tabname: String, topics: List<String>) {
VerticalScroller {
Column {
HeightSpacer(16.dp)
topics.forEach { topic ->
TopicItem(
getTopicKey(
tabname,
"- ",
topic
), topic
)
TopicDivider()
}
}
}
}
希望对您有所帮助。JetNews应用程序中的示例包含静态数据。值得一提的是,根据(尤其是1830),我们应该考虑<代码> ScRultListEng/Cuth>,它是针对具有不确定数量的元素的列表(例如从Web下载的),传统上由<代码> CurryReVIEW < /代码>处理。然后,它应该是这样的:
@Composable
fun NewsFeed(stories: List<StoryData>) {
ScrollingList(stories) { story ->
StoryWidget(story)
}
}
在这种情况下,我们在迭代的每个步骤中都使用了StoryWidget
(或我们选择的任何其他小部件),数据通过lambda表达式动态发出。有一个新版本:
@Composable
fun <T> AdapterList(
data: List<T>,
modifier: Modifier = Modifier.None,
itemCallback: @Composable() (T) -> Unit
)
@Composable
fun Scrollable(
dragDirection: DragDirection,
scrollableState: ScrollableState,
onScrollStarted: (startedPosition: PxPosition) -> Unit = {},
onScrollStopped: (velocity: Float) -> Unit = {},
enabled: Boolean = true,
children: @Composable() () -> Unit
)
AdapterList(
data = (1..20).map { it }.toList()
) {
if (it % 2 == 0) {
Text("$it Even", style = TextStyle(fontSize = 40.sp, color =
Color.Gray))
} else {
Text(text = "$it Odd", style = TextStyle(fontSize = 70.sp))
}
}
@Composable
有趣的改编者(
数据:列表,
修饰符:修饰符=修饰符。无,
itemCallback:@Composable()(T)->Unit
)
@组合的
有趣的滚动(
拖动方向:拖动方向,
scrollableState:scrollableState,
onScrollStarted:(startedPosition:PxPosition)->Unit={},
onScrollStopped:(速度:浮点)->Unit={},
已启用:布尔值=真,
子项:@Composable()()->Unit
)
适配器列表(
data=(1..20).map{it}.toList()
) {
如果(它%2==0){
Text($it偶数),style=TextStyle(fontSize=40.sp,颜色=
颜色(灰色)
}否则{
Text(Text=“$it Odd”,style=TextStyle(fontSize=70.sp))
}
}
更新了,当前在dev06 Jetpack Compose的实现使用了适配器列表
,您可以使用中包含的简单示例,我可以分享一个更复杂的示例(实际场景使用):
- 您的
列表这是一个示例代码,它使用AdapterList在compose中实现recylcerview
@Composable fun Feeds(feeds:LiveData<List<Feed>>) { val mFeeds by feeds.observeAsState(emptyList()) AdapterList(data = feeds){feed-> FeedsItem(feed) } }
新来者的进一步更新。从0.1.0-dev14开始,@Composable 趣味提要(提要:LiveData){ val mFeeds by feed.observeastate(emptyList()) 适配器列表(数据=源){feed-> FeedsItem(feed) } }
被弃用,取而代之的是AdapterList
和LazyColumnItems
LazyRowItems于2021年3月更新:从
不是元素。我在谷歌上搜索,发现1.0.0-beta01开始
- 对于垂直列表
- 水平列表
@Composable 有趣的懒汉{ 懒汉{ 项目((1..1000).toList()){ Text(Text=“Item$it”) } } }
先前的答复供参考: 使用
可以使用:1.0.0-alpha01
- 对于垂直列表
- 用于横向列表
@Composable fun LazyRowItemsDemo() { LazyRowFor(items = (1..1000).toList()) { Text(text = "Item $it") } }
元素在哪里?我正在尝试使用它,但在IDE中找不到它。@LucasSousa你说得对<代码>滚动列表ScrollingList
现在不可用。它将在下一版本中提供。所以,我们必须等待。(发现)是的。回收怎么办您针对dev.14的解决方案是否有一种方法可以像使用滚动列表
一样反转ScrollableColumn(ReverseSrollDirection=true)
?LazyColumnFor
fun addLogic(modelList: ModelList<MyModel>) { modelList.add(MyModel("Smith John", 10)) } class MyModel(var name: String, var index: Int) @Composable fun RecycledList() { // Any name you want val modelList<MyModel> = modelListOf() var counter = 0 addLogic(modelList) modelList.add(MyModel("John Doe", 99)) MaterialTheme { Column { Container(height = 70.dp) { Align(alignment = Alignment.Center) { Button(onClick = { modelList.add(MyModel("John Smith", counter++)) // Any other logic you want }) { Text("ADD ITEM") } } } AdapterList(data = modelList) { item -> Center { Text("Hello ${item.name} - Index: ${item.index}") } }, } } }
@Composable fun Feeds(feeds:LiveData<List<Feed>>) { val mFeeds by feeds.observeAsState(emptyList()) AdapterList(data = feeds){feed-> FeedsItem(feed) } }
@Composable fun LazyRowItemsDemo() { LazyRowFor(items = (1..1000).toList()) { Text(text = "Item $it") } }