Как получить видимые элементы 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возвращает также частично видимые элементы.