如何在viewmodel中获取LazyRow的可见项

SMR*_*SMR 0 android android-viewmodel android-jetpack-compose android-jetpack-compose-lazy-column

我在 jetpack compose 中创建了一个 LazyRow。在视图模型中的某个点,我想从该 LazyRow 获取当前可见项目的列表。我知道我可以使用以下代码获取 Composable 函数中可见项目的列表:

val listState = rememberLazyListState()
val visibleItemIds = remember {
    derivedStateOf { listState.layoutInfo.visibleItemsInfo.map { it.key.toString() } }
}
Run Code Online (Sandbox Code Playgroud)

问题是如何在视图模型事件期间将此数据传递到视图模型(而不是单击按钮等)

Gab*_*tti 5

您可以添加副作用来随时了解哪些可见项目。

LaunchedEffect(visibleItemIds){
   //update your viewModel
}
Run Code Online (Sandbox Code Playgroud)

您还可以在代码中使用 aList<T>代替as:State<List<String>>

val state = rememberLazyListState()
val visibleItemIds: List<Int> by remember {
    derivedStateOf {
        val layoutInfo = state.layoutInfo
        val visibleItemsInfo = layoutInfo.visibleItemsInfo
        if (visibleItemsInfo.isEmpty()) {
            emptyList()
        } else {
            visibleItemsInfo.map { it.index }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

另请注意,visibleItemsInfo还返回部分可见的项目。