繁体   English   中英

Jetpack Compose:如何监听 lazycolumn 等列当前可见的项目?

[英]Jetpack Compose: How to listen column currently visible items like lazycolumn?

我想使用 Column 而不是 LazyColumn,并通过Modifier.verticalScroll(scrollState)使其可滚动,有什么方法可以获取用户在屏幕上看到的当前可见项键吗?

我不确定我是否完全理解,所以这可能是离题的,但这里有一些代码可以跟踪可滚动列中项目的 position,并在第一个可见项目发生变化时更新文本。 性能似乎还可以,至少对于对于非惰性列来说合理的项目列表而言是这样。

@Composable
fun Example() {
    val positions = remember { items.map { 0f }.toMutableStateList() }

    val ss = rememberScrollState()
    val firstVisibleItem by remember {
        derivedStateOf {
            positions.indexOfLast {
                it <= ss.value
            }
        }
    }
    Column(Modifier.fillMaxSize()) {
        Text(
            items.getOrElse(firstVisibleItem) { "None "},
            Modifier
                .fillMaxWidth()
                .background(Color.LightGray)
                .padding(16.dp)
        )
        Column(
            Modifier
                .verticalScroll(ss)
                .fillMaxSize()
                .padding(16.dp)
        ) {
            items.forEachIndexed { index, item ->
                Text(
                    text = item,
                    modifier = Modifier
                        .height(100.dp)
                        .onGloballyPositioned {
                            positions[index] = it.positionInParent().y
                        }
                )
            }
        }
    }
}

顺便说一句,如果一个普通的可滚动列比一个惰性的列有更好的性能,我会感到惊讶,除非项目计数非常小。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM