我注意到在切换到支持库的25.2.0版之后,我的一些用户开始遇到这种崩溃:
Fatal Exception: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.Object android.support.v4.e.a.get(java.lang.Object)' on a null object reference
at android.support.v4.app.FragmentTransition.getInEpicenterView(FragmentTransition.java:817)
at android.support.v4.app.FragmentTransition.access$000$97c744e(FragmentTransition.java:37)
at android.support.v4.app.FragmentTransition$4.run(FragmentTransition.java:657)
at android.support.v4.app.OneShotPreDrawListener.onPreDraw(OneShotPreDrawListener.java:64)
at android.view.ViewTreeObserver.dispatchOnPreDraw(ViewTreeObserver.java:944)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1982)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1073)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5903)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:828)
at android.view.Choreographer.doCallbacks(Choreographer.java:588)
at android.view.Choreographer.doFrame(Choreographer.java:558)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:814)
at android.os.Handler.handleCallback(Handler.java:739)
我在网上看了看但没有找到任何有意义的东西。有没有其他人能够重现这次崩溃?有没有人知道任何变通办法?
更新
我找到了重现崩溃的方法。我的应用程序使用单个Activity和多个片段进行设置。我有片段A和B,它们都显示一个项目列表。每个列表中的项目是相同的,只是排序不同,使用不同的布局。这两个片段都是“顶级片段”,我的意思是它们可以直接从导航抽屉访问。
片段A是指定的“根片段”。这意味着回击总是最终返回到片段A.因此,片段A被编码为使得从导航抽屉尝试导航到它是通过从片段后栈中弹出所有项目来完成的。这似乎对重现崩溃很重要。
点击片段A或B中的项目将打开片段C,项目视图用作从片段A或B到片段C的过渡效果的共享元素。我可以通过点击中的项目来重现此崩溃片段B,然后打开导航抽屉并选择片段A.
我现在正在研究导致此次崩溃的原因以及我可以采取哪些措施来解决这个问题。
更新2
我已经确定了产生此崩溃的确切代码。给定片段A和B,以及从A - >的共享元素转换; B.重复步骤如下:
getSupportFragmentManager().popBackStack(null, 0);
我向Google提交了一个错误,因为它似乎是一个支持库错误。如果有人有任何解决方法,我仍然会接受答案。
答案 0 :(得分:1)
也有这个问题。当用户在使用共享元素作为快速修复的屏幕上时,我暂时只是锁定了导航抽屉。但它看起来固定在支持库25.3.0