项目在滚动列表期间重组
Items recompose during scrolling list
在我的屏幕上有 MyTopItem()
和下面的项目列表。
当我开始滚动列表时,我想隐藏 MyTopItem()
.
它工作正常,但滚动太慢了。
发生这种情况是因为在滚动 MyLazyVerticalGridItemsSection()
中的所有项目时都会重新组合。
如何避免在滚动过程中重组?
Column(Modifier.fillMaxSize()) {
val listState = rememberLazyListState()
AnimatedVisibility(
visible = listState.firstVisibleItemScrollOffset < 1,
enter = expandVertically(),
exit = shrinkVertically()
) {
MyTopItem()
}
MyLazyVerticalGridItemsSection(
items = myItems,
listState = listState
)
}
发生这种情况是因为您直接使用 listState.firstVisibleItemScrollOffset
,因此每次此值更改时都会触发重组。
在这种情况下应该使用 derivedStateOf
- 它只会在计算结果发生变化时触发重组::
val visible by derivedStateOf { listState.firstVisibleItemScrollOffset < 1 }
在我的屏幕上有 MyTopItem()
和下面的项目列表。
当我开始滚动列表时,我想隐藏 MyTopItem()
.
它工作正常,但滚动太慢了。
发生这种情况是因为在滚动 MyLazyVerticalGridItemsSection()
中的所有项目时都会重新组合。
如何避免在滚动过程中重组?
Column(Modifier.fillMaxSize()) {
val listState = rememberLazyListState()
AnimatedVisibility(
visible = listState.firstVisibleItemScrollOffset < 1,
enter = expandVertically(),
exit = shrinkVertically()
) {
MyTopItem()
}
MyLazyVerticalGridItemsSection(
items = myItems,
listState = listState
)
}
发生这种情况是因为您直接使用 listState.firstVisibleItemScrollOffset
,因此每次此值更改时都会触发重组。
在这种情况下应该使用 derivedStateOf
- 它只会在计算结果发生变化时触发重组::
val visible by derivedStateOf { listState.firstVisibleItemScrollOffset < 1 }