我尝试了很多不同的方法来实现向左滑动和向右滑动,但它们都不适用于我。 我想通过滑动来改变两个片段。我试过从这里和其他来源复制的onFling和onTouch方法但是应用程序没有响应触摸或它崩溃。我在MainActivity中编写了必须包含这些片段的实现代码,但是当我在片段上设置onTouch Listeners时它给了我NullPointerException,但是我不知道是否可以将OnTouchListener添加到MainActivity本身? 无论如何,这是我上次写的代码,它给了我一个错误:
尝试在空对象引用上写入'android.app.FragmentManagerImpl android.app.Fragment.mFragmentManager'字段
import java.util.Scanner;
import java.io.FileNotFoundException;
public class test1 {
private static final int FORWARD = 1;
private static final int BACKWARDS = -1;
private static Scanner scn = new Scanner(System.in);
public static void main(String args[]) throws FileNotFoundException {
int N = scn.nextInt();
int k = scn.nextInt();
int m = scn.nextInt();
while (N != 0) {
boolean[] offQueue = new boolean[N];
int offCount = 0;
int kdx = 0;
int mdx = N - 1;
kdx = hello(k, offQueue, kdx, FORWARD);
System.out.println(kdx);
}
}
private static int hello(int q, boolean[] offQueue, int qdx, int direction) {
return qdx;//Problem is here
}
}
答案 0 :(得分:2)
尝试处理 MotionEvent.ACTION_MOVE 而不是 ACTION_UP 。
让我们将滑动动作定义为“当用户触摸并移动手指超过某个阈值距离时”。 所以你的处理程序看起来像:
boolean mSwipePending = false; // let's introduce this flag field
...
// inside touch listener
case MotionEvent.ACTION_DOWN:
x1 = event.getX();
y1 = event.getY();
mSwipePending = true;
break;
case MotionEvent.ACTION_UP:
mSwipePending = false; // do not care about swipe, if up
break;
case MotionEvent.ACTION_MOVE:
if (mSwipePending) {
if (event.getX() > x1 + threshold) {
doSomethighWhenSwipeRight();
mSwipePending = false; // stop next move handling
} else if (event.get(X) < x1 - threshold) {
doSomethighWhenSwipeLeft();
mSwipePending = false; // stop next move handling
}
}
您可以将阈值定义为某个预定义值(例如100),但最好通过屏幕密度计算它。
答案 1 :(得分:1)
由于您要刷两个片段,为什么不尝试使用 ViewPager 和 FragmentPagerAdapter 。
在这里,本教程将指导您如何将片段添加到ViewPager以实现左右滑动效果。
http://www.truiton.com/2013/05/android-fragmentpageradapter-example/
希望它有所帮助。