java - 应用程序因 NavigationView 和 CoordinatorLayout 触摸事件而崩溃

标签 java android

我有一个使用 CoordinatorLayout 和 NavigationDrawer 的应用程序。但是,每当我打开 NavigationView(通过从设备屏幕边缘滑动)时,我的应用程序就会崩溃并出现以下错误:

java.lang.NullPointerException: Attempt to invoke virtual method 'float android.view.MotionEvent.getX()' on a null object reference
        at android.view.View.onTouchEvent(View.java:9409)
        at android.support.design.widget.CoordinatorLayout.onTouchEvent(CoordinatorLayout.java:449)
        at android.view.View.dispatchTouchEvent(View.java:8471)
        at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2373)
        at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2092)
        at android.support.v4.widget.DrawerLayout.cancelChildViewTouch(DrawerLayout.java:1668)
        at android.support.v4.widget.DrawerLayout$ViewDragCallback.peekDrawer(DrawerLayout.java:1916)
        at android.support.v4.widget.DrawerLayout$ViewDragCallback.access$000(DrawerLayout.java:1801)
        at android.support.v4.widget.DrawerLayout$ViewDragCallback$1.run(DrawerLayout.java:1807)
        at android.os.Handler.handleCallback(Handler.java:739)
        at android.os.Handler.dispatchMessage(Handler.java:95)
        at android.os.Looper.loop(Looper.java:135)
        at android.app.ActivityThread.main(ActivityThread.java:5254)
        at java.lang.reflect.Method.invoke(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:372)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)

我尝试覆盖触摸事件方法:

@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
    try {
        return super.dispatchTouchEvent(ev);
    } catch (Exception e) {
        return false;
    }
}

@Override
public boolean onTouchEvent(MotionEvent ev) {
    try {
        return super.onTouchEvent(ev);
    } catch (Exception e) {
        return false;
    }
}

但这并没有帮助。无论如何,我可以修复这个错误吗?

感谢所有建议

最佳答案

好的,所以我可以通过以下方式解决问题:

覆盖我问题中显示的方法:

@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
    try {
        return super.dispatchTouchEvent(ev);
    } catch (Exception e) {
        return false;
    }
}

@Override
public boolean onTouchEvent(MotionEvent ev) {
    try {
        return super.onTouchEvent(ev);
    } catch (Exception e) {
        return false;
    }
}

并为我的 CoordinatorLayout 设置一个 onTouchListener:

coordinatorLayout.setOnTouchListener(new View.OnTouchListener() {
        @Override
        public boolean onTouch(View v, MotionEvent event) {
            return true; //make sure to return true
        }
    });

关于java - 应用程序因 NavigationView 和 CoordinatorLayout 触摸事件而崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32382226/

相关文章:

Java EJB 事务和事务资源

java.io.File.exists() 在 Windows 7 上失败

java - 为什么使用条件编译后 apk 大小相同

Android keystore 文件

java - Firestore 回收器适配器 - 滚动后项目消失

JAVA 或我的 IDE 的限制或 SQL 问题?

java - 提供外部 Tomcat 时的 Spring Boot REST Web 服务端点

java - 文件上传 JSP 和 Servlet 2.5 未获取 Textarea 值

android - Android 支持线程吗?

带有两个拇指的 Android Seekbar