2017-10-21 228 views
1

我有一个叫做ProfileFragment.java的片段,我想通过调用类OnSwipeTouchListener来监听触摸手势。如何在片段中使用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

您必须通过OnSwipeTouchListener上的context参数,而是传递不会从context继承的片段ProfileFragment.this

您应该通过getActivity()为PARAM您OnSwipeTouchListener这样的:

rootLayout.setOnTouchListener(new OnSwipeTouchListener(getActivity()) { 
    /*rest of your code*/ 
});