强制关闭:ColapsingToolbar ontouch

Force Close: ColapsingToolbar ontouch

我在项目中遇到了问题。 我的项目中有一个 CollapsingToolbarLayout,当我向下滚动并关闭工具栏时,然后如果我向上滚动并触摸折叠工具栏中的图像,应用程序会强制关闭,我会看到此错误:

09-10 11:41:35.687  24804-24804/m.ex.as.myTemp E/InputEventReceiver﹕ Exception dispatching input event.
09-10 11:41:35.690  24804-24804/m.ex.as.myTemp E/MessageQueue-JNI﹕ Exception in MessageQueue callback: handleReceiveCallback
09-10 11:41:35.706  24804-24804/m.ex.as.myTemp E/MessageQueue-JNI﹕ 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:9485)
            at android.support.design.widget.CoordinatorLayout.onTouchEvent(CoordinatorLayout.java:449)
            at android.view.View.dispatchTouchEvent(View.java:8547)
            at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2400)
            at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2093)
            at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2406)
            at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2050)
            at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2406)
            at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2050)
            at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2406)
            at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2050)
            at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2406)
            at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2050)
            at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2406)
            at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2050)
            at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:2372)
            at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1722)
            at android.app.Activity.dispatchTouchEvent(Activity.java:2742)
            at android.support.v7.internal.view.WindowCallbackWrapper.dispatchTouchEvent(WindowCallbackWrapper.java:60)
            at android.support.v7.internal.view.WindowCallbackWrapper.dispatchTouchEvent(WindowCallbackWrapper.java:60)
            at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:2333)
            at android.view.View.dispatchPointerEvent(View.java:8742)
            at android.view.ViewRootImpl$ViewPostImeInputStage.processPointerEvent(ViewRootImpl.java:4136)
            at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:4002)
            at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3557)
            at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3610)
            at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3576)
            at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:3693)
            at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3584)
            at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:3750)
            at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3557)
            at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3610)
            at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3576)
            at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3584)
            at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3557)
            at android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:5823)
            at android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:5797)
            at android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:5768)
            at android.view.ViewRootImpl$WindowInputEventReceiver.onInputEvent(ViewRootImpl.java:5913)
            at android.view.InputEventReceiver.dispatchInputEvent(InputEventReceiver.java:185)
            at android.os.MessageQueue.nativePollOnce(Native Method)
            at android.os.MessageQueue.next(MessageQueue.java:143)
            at android.os.Looper.loop(Looper.java:195)
            at android.app.ActivityThread.main(ActivityThread.java:5373)
            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:1020)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:815)
09-10 11:41:35.706  24804-24804/m.ex.as.myTempD/AndroidRuntime﹕ Shutting down VM
09-10 11:41:35.711  24804-24804/m.ex.as.myTemp E/AndroidRuntime﹕ FATAL EXCEPTION: main
    Process: m.ex.as.myTemp, PID: 24804
    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:9485)
            at android.support.design.widget.CoordinatorLayout.onTouchEvent(CoordinatorLayout.java:449)
            at android.view.View.dispatchTouchEvent(View.java:8547)
            at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2400)
            at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2093)
            at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2406)
            at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2050)
            at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2406)
            at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2050)
            at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2406)
            at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2050)
            at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2406)
            at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2050)
            at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2406)
            at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2050)
            at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:2372)
            at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1722)
            at android.app.Activity.dispatchTouchEvent(Activity.java:2742)
            at android.support.v7.internal.view.WindowCallbackWrapper.dispatchTouchEvent(WindowCallbackWrapper.java:60)
            at android.support.v7.internal.view.WindowCallbackWrapper.dispatchTouchEvent(WindowCallbackWrapper.java:60)
            at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:2333)
            at android.view.View.dispatchPointerEvent(View.java:8742)
            at android.view.ViewRootImpl$ViewPostImeInputStage.processPointerEvent(ViewRootImpl.java:4136)
            at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:4002)
            at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3557)
            at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3610)
            at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3576)
            at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:3693)
            at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3584)
            at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:3750)
            at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3557)
            at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3610)
            at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3576)
            at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3584)
            at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3557)
            at android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:5823)
            at android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:5797)
            at android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:5768)
            at android.view.ViewRootImpl$WindowInputEventReceiver.onInputEvent(ViewRootImpl.java:5913)
            at android.view.InputEventReceiver.dispatchInputEvent(InputEventReceiver.java:185)
            at android.os.MessageQueue.nativePollOnce(Native Method)
            at android.os.MessageQueue.next(MessageQueue.java:143)
            at android.os.Looper.loop(Looper.java:195)
            at android.app.ActivityThread.main(ActivityThread.java:5373)
            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:1020)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:815)

注意我得到了同样的错误:

android.view.MotionEvent.getX() 

在我的 NavigationView 项目中,当我触摸屏幕边缘以打开菜单时,打开它的速度有点慢,然后停在那里,但如果我快速打开它,一切都很好。 pn: 现在,我只是创建了一个ontouchListner 来处理触摸,但每个人都知道这不是答案。

那是设计库中的一个错误 23.0.0 甚至我也遇到过类似的问题。虽然在最新版本 23.0.1 中已修复此问题。你应该升级到那个。修复崩溃的其他解决方法是使用以下代码。

collapsingToolbar.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                return true;
            }
        });

issue 记录在此处。