我怎么知道可以导航“LazyColumn”?
How do I know a `LazyColumn` can be navigated?
我怎么知道 LazyColumn
可以导航?
例如,一个列表包含100个元素,那么它是一个可以滚动的惰性列,我们显示一个fab按钮向上滚动,但是当这个列表包含5个元素时,惰性列不可滚动并且FabButton
不再需要。
惰性列表布局信息可以从state
获取,传递给LazyColumn
。
在我的示例中,我使用 derivedStateOf
来防止冗余重组 - 这只会在值实际更改时导致重组。在没有 derivedStateOf
或 side effect 函数的情况下读取 LazyColumn
状态信息会导致严重的性能问题。
这种情况下最基本的逻辑是检查第一个元素是否已经滚动:
val canScrollToTop by remember {
derivedStateOf {
state.layoutInfo.visibleItemsInfo.run {
isNotEmpty() && (first().index > 0 || first().offset < 0)
}
}
}
LazyColumn(state = state) {
// ...
}
if (canScrollToTop) {
// your button
}
我怎么知道 LazyColumn
可以导航?
例如,一个列表包含100个元素,那么它是一个可以滚动的惰性列,我们显示一个fab按钮向上滚动,但是当这个列表包含5个元素时,惰性列不可滚动并且FabButton
不再需要。
惰性列表布局信息可以从state
获取,传递给LazyColumn
。
在我的示例中,我使用 derivedStateOf
来防止冗余重组 - 这只会在值实际更改时导致重组。在没有 derivedStateOf
或 side effect 函数的情况下读取 LazyColumn
状态信息会导致严重的性能问题。
这种情况下最基本的逻辑是检查第一个元素是否已经滚动:
val canScrollToTop by remember {
derivedStateOf {
state.layoutInfo.visibleItemsInfo.run {
isNotEmpty() && (first().index > 0 || first().offset < 0)
}
}
}
LazyColumn(state = state) {
// ...
}
if (canScrollToTop) {
// your button
}