微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

android-clearing backstack 生成 NullPointerException

如何解决android-clearing backstack 生成 NullPointerException

我的应用中有 4 个片段:ABCD。首先,将片段 A 的一个实例添加到活动中,而不添加后台堆栈中。然后用户可以动态导航到无限数量的片段。假设这个场景:

            addToBackstack    addToBackstack    addToBackstack    addToBackstack
========> A ==============> B ==============> D ==============> D ==============> C

其中一些转换也包括共享元素,例如从 B 到 D:

getActivity().getSupportFragmentManager()
.beginTransaction()
.setReorderingallowed(true)
.replace(R.id.fragment_holder,D.newInstance(bundle),TAG)
.addSharedElement(view,name)
.addToBackStack(null)
.commit();

现在我需要将用户从最后一个片段直接带到第一个片段 (A)。所以我试过了:

getSupportFragmentManager().popBackStackImmediate(null,FragmentManager.POP_BACK_STACK_INCLUSIVE);

效果很好,但并不总是。有时(我无法找到肯定会导致异常的确切场景)它会使用以下日志使应用程序崩溃:

2021-07-11 00:53:45.623 14155-14155/app.android.xxx E/AndroidRuntime: FATAL EXCEPTION: main
Process: app.android.xxx,PID: 14155
java.lang.NullPointerException: Attempt to invoke virtual method 'int java.util.ArrayList.size()' on a null object reference
    at androidx.fragment.app.FragmentTransition.captureInSharedElements(FragmentTransition.java:924)
    at androidx.fragment.app.FragmentTransition.configureSharedElementsReordered(FragmentTransition.java:634)
    at androidx.fragment.app.FragmentTransition.configureTransitionsReordered(FragmentTransition.java:252)
    at androidx.fragment.app.FragmentTransition.startTransitions(FragmentTransition.java:152)
    at androidx.fragment.app.FragmentManager.executeOpsTogether(FragmentManager.java:2005)
    at androidx.fragment.app.FragmentManager.removeRedundantOperationsAndExecute(FragmentManager.java:1953)
    at androidx.fragment.app.FragmentManager.execPendingActions(FragmentManager.java:1849)
    at androidx.fragment.app.FragmentManager$4.run(FragmentManager.java:413)
    at android.os.Handler.handleCallback(Handler.java:938)
    at android.os.Handler.dispatchMessage(Handler.java:99)
    at android.os.Looper.loop(Looper.java:223)
    at android.app.ActivityThread.main(ActivityThread.java:7656)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)

是什么导致了这个 NullPointerException 以及如何解决这个问题?!

解决方法

您应该升级到 Fragment 1.3.5,它修复了这个确切的问题(AppCompat 1.3.0 仅依赖于 Fragment 1.3.4,所以默认情况下您不会有这个修复):

implementation "androidx.fragment:fragment:1.3.5"

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。