【发布时间】:2015-11-18 07:27:39
【问题描述】:
升级到设计支持库 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();
CoordinatorLayout 上的 NPE 报告了一个可能相关的问题:CoordinatorLayout NullPointerException in onTouchEvent,但我仍然找不到适合我的情况的解决方法。我已经尝试过这个possible solution 但仍然没有运气......
编辑:
原来解决方案是(正如@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());
【问题讨论】:
-
如果您查看已链接的票证,您可能会注意到它被标记为“FutureRelease”,这意味着该问题已修复,只是尚未发布。从 8 月 20 日星期四发表的评论来看,“我们正在寻求尽快发布修补程序”,希望很快会有一个版本来解决这个问题。否则,似乎最好的做法可能是回到 api 22,或者在修复发布之前忽略该问题。
-
看起来很像,但我担心 Snackbar 问题不会得到解决,因为建议的解决方法不能解决它。无论如何,我想你是对的,如果我回去为生产设计支持 22.2.1 并构建 SDK 22,那将是最好的,但这是一个问题,因为我开始为 Android M 准备我的应用程序......
-
好吧,您可以继续为 23.0.0 做准备并暂时忽略该错误,直到发布修复程序,这有望在 Android M 实际发布给用户之前。这样你就不会在那个意义上落后。如果它真的出来了,你只需要建造 22 年
-
如何减轻无效/空运动事件?继承
AppBarLayout并避免在onInterceptTouchEvent方法中将空运动事件流式传输到超级实现,直到谷歌发布对此的修复。 -
这就是我要找的。谢谢@NikolaDespotoski 原来我只需要覆盖 AppBarLayout.Behavior onInterceptTouchEvent 并将其设置为我的 AppBarLayout...
标签: android android-design-library android-support-design android-snackbar