每次TopAppBar折叠和展开时,所有LazyColumn元素都将重新组合多次。
@OptIn(ExperimentalMaterial3Api::class, ExperimentalAnimationApi::class)
@Composable
fun RoomsScreen(
viewModel: ScreenViewModel = hiltViewModel()
) {
val scrollBehavior = TopAppBarDefaults.enterAlwaysScrollBehavior(rememberTopAppBarState())
scaffold(
modifier = Modifier.nestedScroll(scrollBehavior.nestedScrollConnection),
topBar = {
TopAppBar(
scrollBehavior = scrollBehavior
...
)
},
) { paddingModifier ->
LazyColumn(
modifier = Modifier
.padding(paddingModifier)
.fillMaxSize()
,
) {
items(viewModel.list.size) { index ->
RoomCard(
viewModel = viewModel.list[index],
)
}
}
}
}
很明显,当折叠和展开TopAppBar时,paddingModifier会发生变化,并且LazyColumn必须重新构建,但不完全清楚为什么所有嵌套元素都要重新构建(在移动发生时数百次),这极大地浪费了性能。在这种情况下,您会有什么建议?
P.S:如果你使用pinnedScrollBehavior,当然问题就消失了,但这并不是你想要得到的结果
1条答案
按热度按时间qlvxas9a1#
👋🏼
Scaffold
填充值可以声明为LazyColumn
的contentPadding
,以避免由于填充值的变化而导致的重组:对于
content
,您可以直接添加列表项,而不是循环列表。此外,您可以为每个项设置唯一的(不同的)key
,因此如果项目被重新组合,它不会触发其余项目的重新组合。下面是一个例子:我强烈建议也检查出Layout Inspector
快乐编码!🙌🏼