升级到设计支持库 23.0.0 并构建 SDK 23 后,我的应用程序在我尝试关闭时崩溃Snackbar
:
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)
自更新以来我没有改变任何东西,我使用我知道的唯一方式来显示 Snackbar:
Snackbar.make(rootView, getString(R.string.error_no_permissions),Snackbar.LENGTH_LONG).show();
NPE 报告了CoordinatorLayout
一个可能相关的问题:CoordinatorLayout NullPointerException in onTouchEvent但我仍然找不到适合我情况的解决方法。我已经尝试过这种可能的解决方案,但仍然没有运气......
编辑:
原来解决方案是(正如@NikolaDespotoski 建议的那样)覆盖默认值AppBarLayout.Behavior
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);
}
}
...并在我们的AppBarLayout
((CoordinatorLayout.LayoutParams) findViewById(R.id.appbar).getLayoutParams())
.setBehavior(new AppBarLayoutBehavior());