目次
1つの背景
ViewPager + BottomNavigationView + multiple Fragmentsを使用して、ページ切り替えアーキテクチャをすばやく構築します。1つには4つのページがあります。テストの必要性があるため、真ん中の2つをブロックする必要があります。方法は次のとおりです。
-
クリックできないオプションを設定する:xmlレイアウトファイルでは、BottomNavigationViewのapp:menu属性は各ページのアイテムであり、表示したくないページアイテムのandroid:enabled属性はfalseに設定されており、対応するページは現時点では表示できません。
-
スライドしないようにBottomNavigationViewを設定します。ただし、BottomNavigationViewには、この関数をサポートするための対応するメソッドがありません。
2カスタムViewPagerの実装
[原則]:ViewPagerを継承するCustomViewPagerクラスを記述してから、onTouchEvent、onInterceptTouchEventを書き直し、setSlidingEnableメソッドを追加して、外部パラメーターによるスライドを有効または無効にします。onInterceptTouchEventメソッドの簡単な説明は次のとおりです。
- 役割:上記のタッチイベントをインターセプトするかどうかを決定します。
- パラメータ:
-falseを返します:イベントをインターセプトせず、イベントを解放します。イベントは現在のビューの子コントロールに渡され、子コントロールのdispatchTouchEventメソッドによって配布および処理されます。
-trueを返します。イベントをインターセプトし、処理のために現在のビューのonTouchEventメソッドに渡します。
[コード]:
public class CustomViewPager extends ViewPager {
// the sliding page switch
private boolean isSlidingEnable = true ;
public CustomViewPager(Context context) {
super(context);
}
public CustomViewPager(Context context, AttributeSet attrs) {
super(context, attrs);
}
//重写此函数
@Override
public boolean onTouchEvent(MotionEvent ev) {
return this.isSlidingEnable;
}
//重写此函数
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
return this.isSlidingEnable;
}
public void setSlidingEnable(boolean slidingEnable) {
isSlidingEnable = slidingEnable;
}
}
3使用方法
private CustomViewPager homeViewPager = null;
homeViewPager = (CustomViewPager) findViewById(R.id.view_pager_home);
//中间涉及的其他步骤就不赘述了
homeViewPager.setSlidingEnable(false); //禁止左右滑动
ここで注意すべき問題があります。CustomViewPagerはカスタムクラスです。レイアウトファイルxmlを定義するときにこのCustomViewPagerを使用する必要があります。それ以外の場合は、元のandroidx.viewpager.widget.ViewPagerを使用します。ここではhomeViewPager =(CustomViewPager)findViewById( R.id.view_pager_home);タイプが一致しないため、エラーが報告されます。
————————————————————————————————————
この記事はブロガーのオリジナル記事です。再版のソースを教えてください!
この記事があなたに役立つなら、あなたの裕福な小さな手を持ち上げて、フォロー/コメント/いいね/収集してください、それは私の最大のサポートです!
昇進と昇給、素晴らしい未来をお祈りします!