我正在与Jetpack Compose的LazyColumn和stickyHeader功能挣扎。基本上,静态视图效果良好,但一旦开始滚动,项目将超过固定标题,滚动会出现奇怪的行为,并且最后一个项目永远不会可见,因为滚动总是反弹。
我真的不确定是什么原因导致这个问题,因为代码本身从文档中提供的示例非常简单明了。只有CollectionCard本身是一个更复杂的结构。 我还尝试过删除标题文本(第一个项)并删除Card的Modifier.animateItemPlacement(),但没有任何差异,问题仍然存在... Composable本身在Fragment中的Compose View中使用,但没有嵌套滚动。 你有任何想法会导致这种奇怪的行为吗?或者在使用带有粘性标题的LazyColumn时可能会出现错误吗?
更新: 看起来问题与stickyHeader无关,而是与LazyColumn有关。如果我用“item”替换“stickyHeader”,问题仍然存在...只有当我用column替换lazyColumn时才能正常工作。但我相信一定有解决这个问题的方法...
以下是它的外观:
这是可组合的代码:
@OptIn(ExperimentalFoundationApi::class)
@Composable
fun CollectionsScreen(
collectionsLive: LiveData<List<CollectionsView>>,
onCollectionChanged: (ICalCollection) -> Unit
/* some more hoisted functions left out for simplicity */
) {
val list by collectionsLive.observeAsState(emptyList())
val grouped = list.groupBy { it.accountName ?: it.accountType ?: "Account" }
LazyColumn(
modifier = Modifier.padding(8.dp)
) {
item {
Text(
stringResource(id = R.string.collections_info),
textAlign = TextAlign.Center,
modifier = Modifier.padding(bottom = 16.dp)
)
}
grouped.forEach { (account, collectionsInAccount) ->
stickyHeader {
Text(
account,
style = MaterialTheme.typography.titleLarge,
fontWeight = FontWeight.Bold,
modifier = Modifier.padding(
top = 16.dp,
start = 8.dp,
end = 16.dp,
bottom = 8.dp
)
)
}
items(
items = collectionsInAccount,
key = { collection -> collection.collectionId }
) { collection ->
CollectionCard(
collection = collection,
allCollections = list,
onCollectionChanged = onCollectionChanged,
/* some more hoisted functions left out for simplicity */
modifier = Modifier
.fillMaxWidth()
.padding(bottom = 8.dp)
.animateItemPlacement()
.combinedClickable(
//onClick = { onCollectionClicked(collection) }
)
)
}
}
}
}
我真的不确定是什么原因导致这个问题,因为代码本身从文档中提供的示例非常简单明了。只有CollectionCard本身是一个更复杂的结构。 我还尝试过删除标题文本(第一个项)并删除Card的Modifier.animateItemPlacement(),但没有任何差异,问题仍然存在... Composable本身在Fragment中的Compose View中使用,但没有嵌套滚动。 你有任何想法会导致这种奇怪的行为吗?或者在使用带有粘性标题的LazyColumn时可能会出现错误吗?
更新: 看起来问题与stickyHeader无关,而是与LazyColumn有关。如果我用“item”替换“stickyHeader”,问题仍然存在...只有当我用column替换lazyColumn时才能正常工作。但我相信一定有解决这个问题的方法...