gpt4 book ai didi

java - 如何在 fragment 中使用 setOnTouchListener?

转载 作者:行者123 更新时间:2023-11-30 00:18:00 25 4
gpt4 key购买 nike

我有一个名为 ProfileFragment.java 的 fragment ,我想通过调用类 OnSwipeTouchListener 来监听触摸手势。

这是 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() {
}
}

我能够让上面的代码在一个 Activity 上工作,但不能让它在一个 fragment 上工作。我如何让它在 fragment 上工作?

最佳答案

您必须在 OnSwipeTouchListener 上传递 context 参数,而是传递 fragment ProfileFragment.this,它不继承自上下文

您应该将 getActivity() 作为参数传递给您的 OnSwipeTouchListener,如下所示:

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

关于java - 如何在 fragment 中使用 setOnTouchListener?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46861172/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com