空指针异常:适用于 ICS 4.0 的 android 中自定义库的 GestureDetector.onTouchEv



在我的一个安卓应用程序中,我正在使用自定义图库在图库中显示图像。(我正在使用自定义图库,以便在交换图库时一次显示 1 个项目)

这是我用于自定义库的代码:

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;
    }
}

上面的代码工作正常 2.2,2.3 等....但它在 ICS 4.0 中崩溃导致空指针异常 GestureDetector.onTouchEvent .

请帮忙.

提前谢谢。

我也有同样的零星问题。传递给重写onFling方法的两个MotionEvent参数有时为 null,调用 e2.getX() 会引发异常。您可以通过像这样启动 onFling 方法来解决此问题:

if (e1 == null || e2 == null) return false;

我只在 ICS4.0 上遇到了同样的问题 - 当用户单击Gallery上的项目时,我的Gallery View是在TabHost内打开一个Activity - 它总是给出NullPointerException但仅在 ICS4 上 - 我最终做了以下事情:

//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
 }

该例外现已出现在 ICS4 上。

最新更新