问题
In one of my android app, I am using custom gallery to show images in gallery . (I am using custom gallery in order to show 1 item a time when swapping the gallery)
Here is the code that I am using for custom gallery :
public class CustomGallery extends Gallery {
public CustomGallery(Context context) {
super(context);
}
public CustomGallery(Context context, AttributeSet attrs) {
super(context, attrs);
}
public CustomGallery(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
private boolean isScrollingLeft(MotionEvent e1, MotionEvent e2) {
return e2.getX() > e1.getX();
}
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
float velocityY) {
int kEvent;
if (isScrollingLeft(e1, e2)) { // Check if scrolling left
kEvent = KeyEvent.KEYCODE_DPAD_LEFT;
} else { // Otherwise scrolling right
kEvent = KeyEvent.KEYCODE_DPAD_RIGHT;
}
onKeyDown(kEvent, null);
return true;
}
}
The above code is working fine 2.2,2.3 etc.... but its crashing in ICS 4.0 causing Null pointer Exception GestureDetector.onTouchEvent .
Please help .
Thanks in Advance.
回答1:
I had this same sporadic problem. The two MotionEvent
parameters that is passed to the override onFling
method are sometimes null and calling e2.getX()
throws the exception. You can fix this by starting your onFling method like this:
if (e1 == null || e2 == null) return false;
回答2:
I had the same problem only happening on ICS4.0 - my Gallery
View
was opening an Activity
within the TabHost
when user clicks an item on the Gallery
- it was always giving NullPointerException
but only on ICS4 - I ended up doing the following which did the trick:
//flag returned by onTouch event always false except when we are about to start activity
boolean flag = false;
//add a touch listener
myGallery.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
return flag;
}
});
myGallery.setOnItemClickListener(new OnItemClickListener() {
//handle clicks
//set flag returned by touch listener to true
flag = true;
//now add logic to open up the activity
}
The Exception has now gone on ICS4.
来源:https://stackoverflow.com/questions/11260127/null-pointer-exception-gesturedetector-ontouchevent-for-custom-gallery-in-andro