0

FragmentStatePagerAdapterを持つViewPagerを使用して、Group Aというフラグメントのリストを表示すると、タッチでフラグメント間をスワイプすることができます。 Group Aの各フラグメントは、内部フラグメントGroup Bを保持します。フラグメント内の内側のフラグメントを持つViewPagerのリスナーを処理します

Group Bのフラグメントの1つには、タッチリスナーを横断する水平スクロールを可能にするオブジェクトがあります(Chart)。

Chartオブジェクトのデータをスクロールしようとすると、Group Aスコーリング(ViewPagerスワイプ)を回避する方法を理解できませんでした。それは絵に示すよう

enter image description here

    Chart
  • は灰色で塗られています。
  • Group Aは、2つの断片である:白および緑(スワイプ時に撮影された写真)
  • Group B赤い内側の断片。

ありがとうございます。

答えて

2

ユーザーがグラフに触れたときに表示ページャーのスワイプ機能を無効にし、ユーザーがグラフに触れなくなったときに戻すことができます。最初にNon-Swipable ViewPagerを定義し、ビューページャNonSwipableを作成します。

public class NonSwipableViewPager extends ViewPager { 
    private boolean canScroll = true; 
    public NonSwipableViewPager(Context context) { 
     super(context); 
    } 
    public NonSwipableViewPager(Context context, AttributeSet attrs) { 
     super(context, attrs); 
    } 
    public void setCanScroll(boolean canScroll) { 
     this.canScroll = canScroll; 
    } 
    @Override 
    public boolean onTouchEvent(MotionEvent ev) { 
     return canScroll && super.onTouchEvent(ev); 
    } 
    @Override 
    public boolean onInterceptTouchEvent(MotionEvent ev) { 
     return canScroll && super.onInterceptTouchEvent(ev); 
    } 

    public boolean isCanScroll() { 
     return canScroll; 
    } 
} 

パブリック変数に保管してください。 (デ・ベストプラクティスではないかもしれない活動でのパブリック変数でそれを維持する。)

チャートと以下のようなビューのページャの無効スワイプ能力にタッチリスナーを追加します。

  View yourChart = (YourChart) view.findViewById(R.id.your_chart); 
      public boolean onTouch(View v, MotionEvent event) { 
       switch (event.getAction()) { 
        case MotionEvent.ACTION_DOWN: 
         if (activity.mainViewPager != null) { 
          activity.mainViewPager.setCanScroll(false); 
         } 
         break; 

        case MotionEvent.ACTION_UP: 
         if (activity.mainViewPager != null) { 
          activity.mainViewPager.setCanScroll(true); 
         } 
         break; 
       } 
       return false; 
      } 
     }); 
+0

は、私は意志、ありがとう早くそれをチェックしてください!しかし、私は前に似たようなものを試してみるのが怖いです。 –

+0

問題ありません。これは動作するコードです。私はプロダクションアプリで使っています。 – savepopulation

+0

ようこそ。あなたは私の答えを受け入れましたが、賞品ポイント(+50)を手に入れることができませんでしたか?ありがとう。 – savepopulation

関連する問題