内容转换中的空共享元素NPE

8

我正在为一个相当大的应用程序添加内容转换,大多数情况下我没有任何共享元素,但仍然希望使用过渡动画。我已经将问题追踪到以下代码行:

ActivityOptionsCompat.makeSceneTransitionAnimation(activity, ????);

我已经尝试将Pair数组设置为null或空数组,也尝试过省略它。但无论哪种方式都导致以下错误:

java.lang.NullPointerException: Attempt to invoke virtual method 'void android.view.ViewRootImpl.setPausedForTransition(boolean)' on a null object reference

然而,我只在Android 6.0+上遇到了这个错误,在任何版本的Android 5上都运行良好。我是不是做错了什么?


你解决了这个问题吗? - Eitan
不算真正的答案,只是一条评论。异常似乎并没有破坏任何重要的东西,因此捕获异常可以使动画正常工作。 - Olumide
3个回答

2
我在源代码中进行了大量搜索,发现这是由于漏掉的空指针检查引起的,已在Nougat上修复。但遗憾的是,我不知道如何在6.x版本上解决它。如果崩溃真的让你很困扰,你可以尝试添加一个6.x的try/catch语句,但它也可能会捕获其他你不想要的东西。请参考此链接了解更多信息。

0

这不是一个确切的答案,而是一个解决方法;但我通过使用handler.postDelayed(...)Runnable来推迟动画,成功解决了这个问题。

你可以在this问题中查看我的解决方案的代码。

说实话,对我来说这仍然有点太hacky了,这就是为什么我还在等待更优雅的解决方案的答案。此外,我认为它只在类似于我的情况下才有意义,即在创建视图后立即调用转换时。


0

我遇到了类似的问题。问题在于我设置了

intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK) 

这导致了我正在启动转换的活动被杀死。在Android M上移除它可以解决我的问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接