Jetpack Compose Academy · レッスン

スクロール状態とプログラムスクロール

リストのスクロール位置を読み取り、制御します。

レッスン 4/413 ステップ

「スクロール状態とプログラムスクロール」はCoddyKit上の無料Jetpack Compose Academyレッスンです。 これはレッスン4/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはJetpack Compose Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Jetpack Compose Academyコースには全4レッスンが含まれています。

スクロールを制御する

リストがどれだけスクロールされたかを読み取ったり、任意の位置へ移動させたりしたい場合があります。その役割を担うのが scroll state です。🎚️

rememberLazyListState

rememberLazyListState でリストの状態を作成して保持し、それを LazyColumn、LazyRow、またはグリッドに渡します。

val listState = rememberLazyListState()
LazyColumn(state = listState) { }

グリッドにも状態がある

グリッドには rememberLazyGridState という専用の状態保持オブジェクトがあります。同じ方法で接続して、LazyVerticalGrid の状態を追跡・制御します。

val gridState = rememberLazyGridState()
LazyVerticalGrid(state = gridState, columns = GridCells.Fixed(2)) { }

先頭のアイテムを読み取る

状態から firstVisibleItemIndex を取得すると、現在ビューポートの先頭にあるアイテムを確認できます。

val firstIndex = listState.firstVisibleItemIndex

スクロール方向を検出する

isScrollInProgress フラグを使うと、ユーザーが現在スクロール中かどうかを確認できます。スクロール中にツールバーを隠す場合などに便利です。

if (listState.isScrollInProgress) hideToolbar()

瞬時に移動する

アニメーションなしでアイテムへ直接移動するには、コルーチンスコープから scrollToItem を呼び出します。

scope.launch {
    listState.scrollToItem(index = 0)
}

滑らかにスクロールする

瞬時に移動する代わりに滑らかに移動したい場合は、animateScrollToItem を使います。トップへ戻るボタンに最適です。

scope.launch {
    listState.animateScrollToItem(0)
}

コルーチンスコープが必要な理由

スクロールはサスペンド処理なので、コルーチン内で実行する必要があります。クリックから起動するには rememberCoroutineScope を取得します。

val scope = rememberCoroutineScope()
Button(onClick = { scope.launch { listState.animateScrollToItem(0) } }) { }

トップへ戻るボタンを表示する

2つの考え方を組み合わせます。firstVisibleItemIndex から表示フラグを導出し、タップ時に0までアニメーションスクロールします。

val showFab by remember {
    derivedStateOf { listState.firstVisibleItemIndex > 5 }
}

再コンポジション後も維持される

状態は remembered されるため、再コンポジション後もスクロール位置が維持されます。回転後も保持するには rememberSaveable 版を使います。

状態がUIを動かす

基本的なパターンは一貫しています。scroll state を保持し、位置に応じた処理のために読み取り、スクロール関数を呼び出してリストを自分で移動させます。

クイックチェック

滑らかなスクロールについての確認です。

まとめ:スクロール制御

scroll state を保持し、firstVisibleItemIndex を読み取り、コルーチンから scrollToItem と animateScrollToItem を使ってリストを制御する方法を学びました。🚀

無料で開始

AI チューターと学ぶ Kotlin — 無料

ブラウザでリアルコードを書いて実行し、24/7 の AI チューターから瞬時にサポートを受け、ウェブまたはアプリで続きから学習できます。

コース
30
レッスン
120

よくある質問

「スクロール状態とプログラムスクロール」レッスンは無料ですか?

はい。「スクロール状態とプログラムスクロール」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Jetpack Compose Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Jetpack Compose Academyコースには全4レッスンが含まれています。

「スクロール状態とプログラムスクロール」で何を学びますか?

リストのスクロール位置を読み取り、制御します。 ブラウザで直接実行するハンズオンコードでJetpack Compose Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Jetpack Compose Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのJetpack Compose Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン4/4です。

「スクロール状態とプログラムスクロール」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このJetpack Compose Academyレッスンでコードを書いて実行できますか?

はい。すべてのJetpack Compose Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. LazyVerticalGridギャラリー
  2. カルーセル用のLazyRow
  3. 適応型と固定型のグリッドセル
  4. スクロール状態とプログラムスクロール
← Jetpack Compose Academyに戻る