Tôi đang cố gắng sử dụng Cử chỉ trong một đoạn; Tôi có phần bên dưới của một FragmentActivity xử lý các đoạn chi tiết của tôi. Những gì tôi đang cố gắng xảy ra là khi một swipe được phát hiện trên màn hình để thay thế dữ liệu bên trong của khung nhìn đó với mục nhập trước đó hoặc kế tiếp.Android Fragment onCreateView with Gestures
Nếu có cách xử lý tốt hơn; Tôi là tất cả cho nó. Tuy nhiên, những gì đang xảy ra ở đây là phương thức onFling không bao giờ thực sự được gọi.
public static class DetailsFragment extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
if (container == null) {
return null;
}
View v = inflater.inflate(R.layout.my_view, null, false);
final GestureDetector gesture = new GestureDetector(getActivity(),
new GestureDetector.SimpleOnGestureListener() {
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
float velocityY) {
final int SWIPE_MIN_DISTANCE = 120;
final int SWIPE_MAX_OFF_PATH = 250;
final int SWIPE_THRESHOLD_VELOCITY = 200;
try {
if (Math.abs(e1.getY() - e2.getY()) > SWIPE_MAX_OFF_PATH)
return false;
if (e1.getX() - e2.getX() > SWIPE_MIN_DISTANCE
&& Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
Log.i(Constants.APP_TAG, "Right to Left");
} else if (e2.getX() - e1.getX() > SWIPE_MIN_DISTANCE
&& Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
Log.i(Constants.APP_TAG, "Left to Right");
titles.showDetails(getPosition() - 1);
}
} catch (Exception e) {
// nothing
}
return super.onFling(e1, e2, velocityX, velocityY);
}
});
v.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
return gesture.onTouchEvent(event);
}
});
return v;
}
}
chỉ tò mò: tại sao tham chiếu đến cử chỉ bị mất? –
@LemLordjeKo tại sao tham chiếu đến 'cử chỉ' bị mất? 'gesture' được giữ như một tham chiếu của' View.OnTouchListener' mà chúng ta tạo ra, và nó được giữ như là một tham chiếu bởi chính khung nhìn đó, 'v'. Java là đủ trưởng thành, nếu có một đường dẫn đến một đối tượng, nó gần như chắc chắn sẽ không nhận được GC'd. – bclymer
Nhập khẩu sau đây là cần thiết để đoạn mã trên hoạt động: nhập android.view.View.OnTouchListener; nhập android.view.MotionEvent; nhập android.view.GestureDetector; nhập android.util.Log; Hằng số lớp học { Chuỗi cuối cùng tĩnh công khai APP_TAG = "mytag"; } – FuzzyAmi