2017-10-21 12 views
1

私はクラスOnSwipeTouchListenerを呼び出してタッチジェスチャーを聞きたいProfileFragment.javaという断片を持っています。ここでフラグメントでsetOnTouchListenerを使用するには?

ProfileFragment.javaからのコードの抜粋である:上記のコードから

rootLayout.setOnTouchListener(new OnSwipeTouchListener(ProfileFragment.this) { 

      @Override 
      public void onSwipeTop() { 
       super.onSwipeTop(); 
       //folder_gridview.setVisibility(View.INVISIBLE); 

       // do something 
      } 
}); 

私はこのエラーを取得する:ここで

OnSwipeTouchListener (android.content.Context) in OnSwipeTouchListener cannot be applied to (com.mydomain.sample.ProfileFragment)

OnSwipeTouchListener.javaクラスのコードです:

public class OnSwipeTouchListener implements OnTouchListener { 

    private final GestureDetector gestureDetector; 

    public OnSwipeTouchListener(Context ctx) { 
     gestureDetector = new GestureDetector(ctx, new GestureListener()); 
    } 

    @Override 
    public boolean onTouch(View v, MotionEvent event) { 
     return gestureDetector.onTouchEvent(event); 
    } 

    private final class GestureListener extends SimpleOnGestureListener { 

     private static final int SWIPE_THRESHOLD = 1; 
     private static final int SWIPE_VELOCITY_THRESHOLD = 1; 

     @Override 
     public boolean onDown(MotionEvent e) { 
      return true; 
     } 

     @Override 
     public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { 
      boolean result = false; 
      try { 
       float diffY = e2.getY() - e1.getY(); 
       float diffX = e2.getX() - e1.getX(); 
       if (Math.abs(diffX) > Math.abs(diffY)) { 
        if (Math.abs(diffX) > SWIPE_THRESHOLD && Math.abs(velocityX) > SWIPE_VELOCITY_THRESHOLD) { 
         if (diffX > 0) { 
          onSwipeRight(); 
         } else { 
          onSwipeLeft(); 
         } 
        } 
        result = true; 
       } else if (Math.abs(diffY) > SWIPE_THRESHOLD && Math.abs(velocityY) > SWIPE_VELOCITY_THRESHOLD) { 
        if (diffY > 0) { 
         onSwipeBottom(); 
        } else { 
         onSwipeTop(); 
        } 
       } 
       result = true; 

      } catch (Exception exception) { 
       exception.printStackTrace(); 
      } 
      return result; 
     } 
    } 

    public void onSwipeRight() { 
    } 

    public void onSwipeLeft() { 
    } 

    public void onSwipeTop() { 
    } 

    public void onSwipeBottom() { 
    } 
} 

私はできました上記のコードをアクティビティで動作させることはできますが、それをフラグメントで動作させることはできません。フラグメントを処理するにはどうしたらいいですか?

答えて

1

あなたOnSwipeTouchListenercontextのparamに合格する必要がありますが、その代わり、あなたはcontextから継承していないフラグメント、ProfileFragment.thisを渡します。

あなたはこのようなあなたのOnSwipeTouchListener上のparamとしてgetActivity()を渡す必要があります。

rootLayout.setOnTouchListener(new OnSwipeTouchListener(getActivity()) { 
    /*rest of your code*/ 
}); 
関連する問題