Closed5
スクロールの伝播について(Android)

- viewPager2やrecyclerViewはネストスクロールに対応していない
- 一方ComposeのLazyRowやhorizontalScrollなどはネストスクロールに対応している

Jetpack Composeでネストスクロールしてほしくない場合は、RecyclerViewやViewPager2で組んでそれをAndroidViewで組み込むしか無さそう。

以下の記事にあるようにscrollableを指定してやると、ネストスクロールはされなくなるが、ストレッチが効かなくなったり、一番最後のページに遷移したあと少しの間スクロールができなくなったりする。

- layout resourceをComposeで使いたい場合は、AndroidViewでfacroty引数でViewをinflateする
- layout resourceで変数を扱っているような場合は、AndroidViewBindingを使用する
参考URL

背景
Jetpack Composeのいくつかのコンポーネントや修飾子(verticalScroll、horizontalScroll、scrollable、Lazy API および TextField)ではネストスクロールがデフォルトでサポートされています。
ネストスクロールによる困りごと
Jetpack Composeで以下のような画面を実装する際、HorizontalPagerをネストします。
その際画像のPagerのアイテムが末尾まで到達後、さらにスクロールすると次のタブに移動してしまいます。
// TODO: ここで実装例出す
改善してみたこと
scrollableモディファイアを使用して、親コンポーネントにスクロール操作を渡さないようにする
こちらの記事で私と全く同じ事象で困っており、その対応策が書かれています。こちらを試してみたところ確かに親にスクロール操作が渡らないようになったのですが、以下の問題がありました。
- オーバースクロールが無効になってしまう
- 末尾のアイテムまで来ても連続してスクロールした場合、なぜか逆方向のスクロールが一定時間効かなくなってしまう
参考URL
このスクラップは2023/03/11にクローズされました