Как получить видимые элементы LazyRow в модели представления
Я создал LazyRow в компоновке реактивного ранца. В определенный момент в модели представления я хочу получить список видимых в данный момент элементов из этого LazyRow. Я знаю, что могу получить список видимых элементов в функции Composable, используя следующий код:
val listState = rememberLazyListState()
val visibleItemIds = remember {
derivedStateOf { listState.layoutInfo.visibleItemsInfo.map { it.key.toString() } }
}
Проблема в том, как я могу передать эти данные в модель представления во время события модели представления (не нажатие кнопки и т. д.)
1 ответ
Вы можете добавить побочный эффект, чтобы знать, какие элементы видны в любое время.
LaunchedEffect(visibleItemIds){
//update your viewModel
}
Вы также можете иметьList<T>
вместо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 }
}
}
}
Также обратите внимание, чтоvisibleItemsInfo
возвращает также частично видимые элементы.