web-dev-qa-db-ja.com

ViewPager2でスワイプを無効にする方法は?

新しいAndroid viewpager2 コンポーネント?

23
murgupluoglu

viewpager2を使用してVersion 1.0.0-alpha02を有効/無効にできるようになりました

implementation 'androidx.viewpager2:viewpager2:1.0.0-alpha02'を使用します

バージョン1.0.0-alpha02

新機能

  • ユーザー入力を無効にする機能(setUserInputEnabledisUserInputEnabled

APIの変更

  • ViewPager2クラスfinal

バグ修正

  • FragmentStateAdapter安定性の修正

viewpager2でのスワイプを無効にするサンプルコード

myViewPager2.setUserInputEnabled(false);

viewpager2でスワイプを有効にするサンプルコード

myViewPager2.setUserInputEnabled(true);
44
Nilesh Rathod

フードの下 ViewPager2RecyclerViewと連携してフラグメントビューを拡張しますが、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番目のアプローチは、ViewPager2ViewGroupであり、タッチイベントをインターセプトする魔法をかけます。これは、それらが子ビューにディスパッチされる前に(RecyclerViewと推測されるように)、クリックを防止しないように注意してください。

4