9

Tôi có Thư viện có OnItemSelectedListener và OnItemClickListener. Vì vậy, tôi có thể di chuyển giữa các hình ảnh, và nếu tôi bấm vào một, cái gì khác xảy ra (phụ thuộc vào đó tôi đã nhấp). Nó hoạt động tốt trước khi phiên bản 3.0, nhưng từ đó (3,0-4,0) sau khi nó xử lý các sự kiện onItemClick, một ngoại lệ gây tử vong xảy ra:Gallery onItemClick và onTouchEvent không hoạt động cùng nhau kể từ phiên bản Android 3.0

12-07 18:46:03.008: E/AndroidRuntime(935): FATAL EXCEPTION: main 
12-07 18:46:03.008: E/AndroidRuntime(935): java.lang.NullPointerException 
12-07 18:46:03.008: E/AndroidRuntime(935): at android.view.GestureDetector.onTouchEvent(GestureDetector.java:587) 
12-07 18:46:03.008: E/AndroidRuntime(935): at android.widget.Gallery.onTouchEvent(Gallery.java:937) 
12-07 18:46:03.008: E/AndroidRuntime(935): at android.view.View.dispatchTouchEvent(View.java:5462) 
12-07 18:46:03.008: E/AndroidRuntime(935): at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:1947) 
12-07 18:46:03.008: E/AndroidRuntime(935): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1708) 
12-07 18:46:03.008: E/AndroidRuntime(935): at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:1953) 
12-07 18:46:03.008: E/AndroidRuntime(935): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1722) 
12-07 18:46:03.008: E/AndroidRuntime(935): at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:1953) 
12-07 18:46:03.008: E/AndroidRuntime(935): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1722) 
12-07 18:46:03.008: E/AndroidRuntime(935): at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:1953) 
12-07 18:46:03.008: E/AndroidRuntime(935): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1722) 
12-07 18:46:03.008: E/AndroidRuntime(935): at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:1953) 
12-07 18:46:03.008: E/AndroidRuntime(935): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1722) 
12-07 18:46:03.008: E/AndroidRuntime(935): at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:1953) 
12-07 18:46:03.008: E/AndroidRuntime(935): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1722) 
12-07 18:46:03.008: E/AndroidRuntime(935): at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:1953) 
12-07 18:46:03.008: E/AndroidRuntime(935): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1722) 
12-07 18:46:03.008: E/AndroidRuntime(935): at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:1953) 
12-07 18:46:03.008: E/AndroidRuntime(935): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1722) 
12-07 18:46:03.008: E/AndroidRuntime(935): at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:1882) 
12-07 18:46:03.008: E/AndroidRuntime(935): at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1361) 
12-07 18:46:03.008: E/AndroidRuntime(935): at android.app.Activity.dispatchTouchEvent(Activity.java:2364) 
12-07 18:46:03.008: E/AndroidRuntime(935): at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:1830) 
12-07 18:46:03.008: E/AndroidRuntime(935): at android.view.View.dispatchPointerEvent(View.java:5638) 
12-07 18:46:03.008: E/AndroidRuntime(935): at android.view.ViewRootImpl.deliverPointerEvent(ViewRootImpl.java:2827) 
12-07 18:46:03.008: E/AndroidRuntime(935): at android.view.ViewRootImpl.handleMessage(ViewRootImpl.java:2406) 
12-07 18:46:03.008: E/AndroidRuntime(935): at android.os.Handler.dispatchMessage(Handler.java:99) 
12-07 18:46:03.008: E/AndroidRuntime(935): at android.os.Looper.loop(Looper.java:137) 
12-07 18:46:03.008: E/AndroidRuntime(935): at android.app.ActivityThread.main(ActivityThread.java:4340) 
12-07 18:46:03.008: E/AndroidRuntime(935): at java.lang.reflect.Method.invokeNative(Native Method) 
12-07 18:46:03.008: E/AndroidRuntime(935): at java.lang.reflect.Method.invoke(Method.java:511) 
12-07 18:46:03.008: E/AndroidRuntime(935): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) 
12-07 18:46:03.008: E/AndroidRuntime(935): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 
12-07 18:46:03.008: E/AndroidRuntime(935): at dalvik.system.NativeStart.main(Native Method) 
+1

Tôi có thể xác nhận rằng sự cố này không chỉ xảy ra với 'Thư viện' mà còn cả' ImageView' nữa. Thủ phạm có vẻ là 'VelocityTracker' bên trong khung nhìn. –

Trả lời

10

tôi đã cùng một vấn đề. Tôi đã bắt đầu Hoạt động từ onItemClick và điều đó đã làm hỏng ứng dụng.

Vấn đề, tôi nghĩ là cố gắng thực hiện điều gì đó chỉ nên thực hiện trên luồng chính (như bắt đầu một hoạt động).

Tôi đã triển khai "Trình xử lý" và hoạt động tốt.

Tạo một Handler như là một biến toàn cầu:

private Handler handler; 

Đặt handler bên onCreate vì thế nó là về các chủ đề chính:

handler = new Handler(); 

Tạo một đường bưu điện đến xử lý trong onItemClick, vẻ bề ngoài của tôi như thế này:

handler.post(new Runnable() { 

    @Override 
    public void run() { 
     // Do what ever... 
    } 
}); 
+1

Tôi không hiểu. Nếu vấn đề là "một cái gì đó nên được thực hiện chỉ trên chủ đề chính", không nên lỗi xuất hiện trong "cái gì đó"? Cách tôi thấy dấu vết ngăn xếp, lỗi xuất hiện trong 'GestureDetector.java: 587', cụ thể là (xem mã nguồn): ' mVelocityTracker.recycle(); ' Điều này có nghĩa là' mVelocityTracker' là trong trường hợp này 'null '. Làm thế nào để bạn suy ra từ điều này rằng đây là một vấn đề thread? –

+0

Cảm ơn Valer Dragos vì giải pháp tốt đẹp +10 –

+0

giống với mặt của tôi –

0

Tôi cũng có NPE trong onTouchEvent(): 587. Vì vậy, tôi bắt đầu sử dụng GestureDetectorCompat từ thư viện hỗ trợ và nó hoạt động tốt.

Các vấn đề liên quan