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

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

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

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")
    }
}

С 1.0.0-beta02 в <strong> <tcode id="22868116"></tcode></strong> создает список с вертикальной прокруткой.

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

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

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

В <strong> <tcode id="22868118"></tcode></strong>- это объект состояния, который можно поднять для управления и наблюдения за прокруткой. Он создан через rememberLazyListState.

      val listState = rememberLazyListState()

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

      // Provide it to LazyColumn
LazyColumn(state = state) {
    // 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")
}
Другие вопросы по тегам