Jetpack Compose LazyColumnFor устарело, как использовать LazyColumn с listState и списком объектов?

Начиная с Jetpack Compose 1.0.0-alpha09LazyColumn, LazyColumnForIndexed и аналоги строки устарели. Как используется LazyColumn, где, почему и как я должен использовать rememberLazyListState?

Если вы можете предоставить полный пример с элементами, состоянием и прослушивателем onClick, это будет очень полезно.

9
0
8 226
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

В этой документации описывается, как использовать LazyColumn вместо LazyColumnFor.

https://developer.android.com/reference/kotlin/androidx/compose/foundation/lazy/package-summary#lazycolumn

Особая часть интереса из документации:

import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.material.Text

val itemsList = (0..5).toList()
val itemsIndexedList = listOf("A", "B", "C")

LazyColumn {
    items(itemsList) {
        Text("Item is $it")
    }

    item {
        Text("Single item")
    }

    itemsIndexed(itemsIndexedList) { index, item ->
        Text("Item at index $index is $item")
    }
}

Спасибо. Не могли бы вы показать, как использовать rememberLazyListState тоже? Это для сохранения и восстановления положения прокрутки?

Thracian 23.12.2020 10:21

Я думаю, это как другие remembers. Вы сохраняете положение прокрутки внутри функции Composable, верно?

Thracian 23.12.2020 10:22

Вам нужно импортировать import androidx.compose.foundation.lazy.items

Achraf Amil 28.02.2021 00:22

С помощью 1.0.0-beta06LazyColumn создает список с вертикальной прокруткой.

Что-то вроде:

val itemsList = (0..30).toList()

LazyColumn {
    items(itemsList) {
        Text("Item is $it")
    }
}

LazyListState — это объект состояния, который можно поднять для контроля и наблюдения за прокруткой. Он создается через rememberLazyListState.

val listState = rememberLazyListState()

Его можно использовать для реагирования и прослушивания изменений положения прокрутки и расположения элементов.

// Provide it to LazyColumn
LazyColumn(state = liststate) {
    // Check if the first visible item is past the first item
   if (listState.firstVisibleItemIndex > 0){
       //...
   }
}

или для управления положением прокрутки:

// Remember a CoroutineScope to be able to launch
val coroutineScope = rememberCoroutineScope()

LazyColumn(state = listState) {
    // ...
}

lazyListState.animateScrollToItem(lazyListState.firstVisibleItemIndex)

Button (
    onClick = { 
        coroutineScope.launch {
            // Animate scroll to item with index=5
            listState.animateScrollToItem(index = 5)
        }
    }
){
    Text("Click")
}

Другие вопросы по теме