LoginSignup
2
2

More than 3 years have passed since last update.

Jetpack Composeでリストの最後を検知する

Posted at

Jetpack Composeでリスト表示を作るとき、今までのRecyclerViewのようにリスト表示を作るとき、 LazyColumnというComposableメソッドを使うと思います。

この LazyColumnの引数には、 LazyListState型の stateを渡すことができ、これによって今リストのどのへんをスクロールしてるかなどの状態を参照したり、操作したりできるようになります。

そして本題のリストが最後のItemまでスクロールされたかどうかを検知する方法ですが、自分は今の所下記の方法で実装しています。

val listState = rememberLazyListState()
        LazyColumn(
            contentPadding = LocalWindowInsets.current.systemBars
                .toPaddingValues(top = false, start = false, end = false),
            state = listState
        ) {
                if (listState.firstVisibleItemIndex + listState.layoutInfo
                .visibleItemsInfo.size == listState.layoutInfo.totalItemsCount) {
                      // なにかする
                }
            }
        }

listState がリストの状態を持っている変数です。

listState.firstVisibleItemIndexが今画面に表示されている一番上のItemのindexを持っています。そして、listState.layoutInfo.visibleItemsInfo.sizeが今画面に表示されているItemの数を持っています。これを足した値が、 listState.layoutInfo.totalItemsCountである全体のリストの長さと同じになったときリストが一番最後までスクロールされた状態であることがわかります。

自分はこの方法でやっているのですが、もっとスマートなやり方がありそうなので詳しい方教えてくださると嬉しいです。

そのうち、デフォルトでリスナーみたいなのが LazyListStateから生えるといいな。。。。

ちなみに、 LazyListStateには listState.animateScrollToItem()っていうのがいてよくある、リストを一番上まで一気にスクロールさせるようなものも簡単に実装できそうです。

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2