【发布时间】:2021-12-01 21:37:17
【问题描述】:
我有一个 LazyColumn,它有多个列表,它应该根据 index 值显示。但是,当我更改 index 时,列表会发生变化,但在我向下滚动并向上滚动之前不会重绘这些项目。
我已经折腾了 remember 关键字,改变了我的逻辑 N 次,它仍然不会更新。
这是我的课
@Composable
fun MainContent() {
val state = homeViewModel.state.collectAsState(initial = HomepageState.Loading)
Theme(config = config) {
when (state.value) {
is HomepageState.Loading -> Box(
modifier = Modifier.fillMaxSize(),
contentAlignment = Alignment.Center
) { CircularProgressIndicator() }
is HomepageState.Multi -> with(state.value as HomepageState.Multi) {
updateHomepageImagePreference(index)
LazyColumnContent(homepage = items, switcher, logo, index)
}
}
}
}
主页[index] 部分是我想触发重组的部分。我尝试传递正确的列表而不是更改索引,但结果是一样的
@Composable
private fun LazyColumnContent(
homepage: List<List<ModuleConfig>>,
switcher: HomepageSwitcherTheme?,
logo: HomepageThemeNavLogo?,
index: Int = 0
) {
LaunchedEffect(key1 = index) {
updateHomepageSwitcher(switcher)
updateNavigationBarLogo(logo)
}
return LazyColumn(
modifier = Modifier
.fillMaxSize()
.background(vennConfig.themeConfig.backgroundColor?.color)
) {
itemsIndexed(homepage[index]) { _, item ->
AndroidView(
modifier = Modifier.fillMaxSize(),
factory = {
val productsInCategoryCriteriaSatisfied =
if (item.requiresProductsInCategoryId.isNullOrEmpty()) true
else categoryHasProducts[item.requiresProductsInCategoryId] ?: true
return@AndroidView if (productsInCategoryCriteriaSatisfied) moduleFactory.build(
item,
requireContext()
)
else View(context) // blank view
}
)
}
}
}
我猜我在使用 Compose 时做错了什么,但我不知道是什么问题。
【问题讨论】:
标签: android kotlin android-jetpack-compose