Метод scrollToItem
Метод scrollToItem класса
LazyListState
сдвигает список так, чтобы пункт с индексом
index оказался у начала видимой области.
Метод suspend, его вызывают
внутри корутины через
rememberCoroutineScope
или LaunchedEffect.
Дополнительный сдвиг задаёт параметр scrollOffset
в пикселях.
Синтаксис
listState.scrollToItem(index = 5)
Параметры
| Параметр | Описание |
|---|---|
index |
Индекс пункта списка, к которому нужно прокрутить. |
scrollOffset |
Смещение пункта от начала viewport в пикселях.
По умолчанию 0.
|
Пример
Давайте по кнопке перейдём к десятому пункту без анимации:
import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.lazy.items
import androidx.compose.foundation.lazy.rememberLazyListState
import androidx.compose.material3.Button
import androidx.compose.material3.Text
import androidx.compose.runtime.rememberCoroutineScope
import kotlinx.coroutines.launch
class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
val listState = rememberLazyListState()
val scope = rememberCoroutineScope()
val lines = List(20) { "abcde" } + listOf("12345")
Column {
Button(
onClick = {
scope.launch {
listState.scrollToItem(20)
}
},
) {
Text(text = "12345")
}
LazyColumn(state = listState) {
items(lines) { line ->
Text(text = line)
}
}
}
}
}
}
На экране после нажатия список сразу покажет
строку "12345" в начале видимой области.
Пример
Давайте вызовем scrollToItem из LaunchedEffect при старте:
import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.lazy.items
import androidx.compose.foundation.lazy.rememberLazyListState
import androidx.compose.material3.Text
import androidx.compose.runtime.LaunchedEffect
class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
val listState = rememberLazyListState()
val lines = List(15) { "abcde" }
LaunchedEffect(Unit) {
listState.scrollToItem(10)
}
LazyColumn(state = listState) {
items(lines) { line ->
Text(text = line)
}
}
}
}
}
На экране при открытии экрана список сразу окажется на одиннадцатом пункте.
Смотрите также
-
метод
animateScrollToItem,
который прокручивает с анимацией -
класс
LazyListState,
у которого вызывают scrollToItem -
метод
scrollToItem,
аналог для ленивой сетки -
функция
rememberLazyListState,
которая создаёт состояние списка