2015-09-02 37 views
0

cheesesquare是一個材料設計的示範應用程序。 當更新compileSdkVersion,targetSdkVersion,因此庫com.android.support{design|appcompat-v7|cardview-v7|recyclerview-v7}到版本23出現bug。 當手動駁回小吃吧,應用程序崩潰如下:解僱小吃店時v23崩潰cheesesquare應用

09-02 17:56:30.883 27476-27476/com.support.android.designlibdemo E/AndroidRuntime﹕ FATAL EXCEPTION: main 
    Process: com.support.android.designlibdemo, PID: 27476 
    java.lang.NullPointerException: Attempt to invoke virtual method 'int android.view.MotionEvent.getAction()' on a null object reference 
      at android.support.design.widget.AppBarLayout$Behavior.onInterceptTouchEvent(AppBarLayout.java:729) 
      at android.support.design.widget.AppBarLayout$Behavior.onInterceptTouchEvent(AppBarLayout.java:629) 
      at android.support.design.widget.CoordinatorLayout.performIntercept(CoordinatorLayout.java:357) 
      at android.support.design.widget.CoordinatorLayout.onInterceptTouchEvent(CoordinatorLayout.java:409) 
      at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1960) 
      at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2405) 
      at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2106) 
      at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2405) 
      at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2106) 
      at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2405) 
      at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2106) 
      at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2405) 
      at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2106) 
      at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2405) 
      at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2106) 
      at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2405) 
      at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2106) 
      at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:2369) 
      at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1719) 
      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:2330) 
      at android.view.View.dispatchPointerEvent(View.java:8666) 
      at android.view.ViewRootImpl$ViewPostImeInputStage.processPointerEvent(ViewRootImpl.java:4123) 
      at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:3989) 
      at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3544) 
      at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3597) 
      at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3563) 
      at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:3680) 
      at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3571) 
      at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:3737) 
      at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3544) 
      at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3597) 
      at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3563) 
      at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3571) 
      at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3544) 
      at android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:5807) 
      at android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:5781) 
      at android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:5752) 
      at android.view.ViewRootImpl$WindowInputEventReceiver.onInputEvent(ViewRootImpl.java:5897) 
      at android.view.InputEventReceiver.dispatchInputEvent(InputEventReceiver.java:185) 
      at android.view.InputEventReceiver.nativeConsumeBatchedInputEvents(Native Method) 
      at android.view.InputEventReceiver.consumeBatchedInputEvents(InputEventReceiver.java:176) 
      at android.view.ViewRootImpl.doConsumeBatchedInput(ViewRootImpl.java:5868) 
      at android.view.ViewRootImpl$ConsumeBatchedInputRunnable.run(ViewRootImpl.java:5920) 
      at android.view.Choreographer$CallbackRecord.run(Choreographer.java:767) 
      at android.view.Choreographer.doCallbacks(Choreographe 

aforementioned site表明:

改寫默認AppBarLayout.Behavior onInterceptTouchEvent方法是這樣的:

@Override 
    public boolean onInterceptTouchEvent(CoordinatorLayout parent, AppBarLayout child, 
             MotionEvent ev) { 
     return ev != null && super.onInterceptTouchEvent(parent, child, ev); 
    } 

並將其應用於您的AppBarLayout。

但我不確定這是什麼意思。

最明確的建議,我發現是this

public class AppBarLayoutBehavior extends AppBarLayout.Behavior { 

    @Override 
    public boolean onInterceptTouchEvent(CoordinatorLayout parent, AppBarLayout child, 
             MotionEvent ev) { 
     return !(parent != null && child != null && ev != null) 
       || super.onInterceptTouchEvent(parent, child, ev); 
     } 
    } 

設置行爲:

((CoordinatorLayout.LayoutParams) findViewById(R.id.appBarLayout).getLayoutParams()).setBehavior(new AppBarLayoutBehavior()); 

所以我加了班AppBarLayoutBehavior和放線以上的的onCreate有問題的課程。但現在我得到:

09-02 17:49:38.421 23604-23604/com.support.android.designlibdemo E/AndroidRuntime﹕ FATAL EXCEPTION: main 
    Process: com.support.android.designlibdemo, PID: 23604 
    java.lang.RuntimeException: Unable to start activity ComponentInfo{com.support.android.designlibdemo/com.support.android.designlibdemo.MainActivity}: java.lang.ClassCastException: android.support.v4.widget.DrawerLayout$LayoutParams cannot be cast to android.support.design.widget.CoordinatorLayout$LayoutParams 
      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2325) 
      at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387) 
      at android.app.ActivityThread.access$800(ActivityThread.java:151) 
      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303) 
      at android.os.Handler.dispatchMessage(Handler.java:102) 
      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) 
    Caused by: java.lang.ClassCastException: android.support.v4.widget.DrawerLayout$LayoutParams cannot be cast to android.support.design.widget.CoordinatorLayout$LayoutParams 
      at com.support.android.designlibdemo.MainActivity.onCreate(MainActivity.java:64) 
      at android.app.Activity.performCreate(Activity.java:5990) 
      at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1106) 
      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2278) 
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387) 
            at android.app.ActivityThread.access$800(ActivityThread.java:151) 
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303) 
            at android.os.Handler.dispatchMessage(Handler.java:102) 
            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) 

測試

回答

相關問題