新しいAndroid viewpager2
コンポーネント?
viewpager2
を使用してVersion 1.0.0-alpha02
を有効/無効にできるようになりました
implementation 'androidx.viewpager2:viewpager2:1.0.0-alpha02'
を使用します
新機能
setUserInputEnabled
、isUserInputEnabled
)APIの変更
ViewPager2
クラスfinalバグ修正
FragmentStateAdapter
安定性の修正viewpager2でのスワイプを無効にするサンプルコード
myViewPager2.setUserInputEnabled(false);
viewpager2でスワイプを有効にするサンプルコード
myViewPager2.setUserInputEnabled(true);
フードの下 ViewPager2
はRecyclerView
と連携してフラグメントビューを拡張しますが、RecyclerView
は非表示になっているので、ばかばかしくなっています。
val rv : RecyclerView = viewPager.getChildAt(0) as RecyclerView
rv.layoutManager = NonScrollingLayoutManager( rv.context, rv.layoutManager as LinearLayoutManager)
奇妙な方法は、RecyclerView
である位置0の子を取得し、レイアウトマネージャーをラップすることにより、レイアウトマネージャーでのスクロールを無効にすることです。
inner class NonScrollingLayoutManager(context: Context, val layoutManager: LinearLayoutManager) :
LinearLayoutManager(context, layoutManager.orientation, layoutManager.reverseLayout) {
override fun canScrollVertically(): Boolean = layoutManager.orientation == HORIZONTAL
override fun canScrollHorizontally(): Boolean = layoutManager.orientation == VERTICAL
}
APIがRecyclerViewに使用されるレイアウトマネージャーを変更する場合、つまりLinearLayoutManager
から移動する場合、これは機能せず、一部のメソッドをオーバーライドしてスーパーメソッドを確実に呼び出す必要があることに注意してください。
2番目のアプローチは、ViewPager2
はViewGroup
であり、タッチイベントをインターセプトする魔法をかけます。これは、それらが子ビューにディスパッチされる前に(RecyclerView
と推測されるように)、クリックを防止しないように注意してください。