首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >迁移到AndroidX后,在尝试调用null引用上的androidx.fragment.app.FragmentManagerImpl.isDestroyed()时应用程序崩溃

迁移到AndroidX后,在尝试调用null引用上的androidx.fragment.app.FragmentManagerImpl.isDestroyed()时应用程序崩溃
EN

Stack Overflow用户
提问于 2019-06-16 19:37:37
回答 4查看 5.4K关注 0票数 12

整个堆栈只包含android核心代码:

代码语言:javascript
运行
复制
java.lang.NullPointerException: Attempt to invoke virtual method 'boolean androidx.fragment.app.FragmentManagerImpl.isDestroyed()' on a null object reference
    at androidx.fragment.app.Fragment.performDetach(Fragment.java:2844)
    at androidx.fragment.app.FragmentManagerImpl.moveToState(FragmentManagerImpl.java:1033)
    at androidx.fragment.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManagerImpl.java:1237)
    at androidx.fragment.app.BackStackRecord.executeOps(BackStackRecord.java:434)
    at androidx.fragment.app.FragmentManagerImpl.executeOps(FragmentManagerImpl.java:2075)
    at androidx.fragment.app.FragmentManagerImpl.executeOpsTogether(FragmentManagerImpl.java:1865)
    at androidx.fragment.app.FragmentManagerImpl.removeRedundantOperationsAndExecute(FragmentManagerImpl.java:1820)
    at androidx.fragment.app.FragmentManagerImpl.execPendingActions(FragmentManagerImpl.java:1726)
    at androidx.fragment.app.FragmentManagerImpl$2.run(FragmentManagerImpl.java:150)
    at android.os.Handler.handleCallback(Handler.java:873)
    at android.os.Handler.dispatchMessage(Handler.java:99)
    at android.os.Looper.loop(Looper.java:193)
    at android.app.ActivityThread.main(ActivityThread.java:6669)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)

当替换main activity中的片段时会发生这种情况:

代码语言:javascript
运行
复制
Runnable mPendingRunnable = new Runnable() {
            @Override
            public void run() {
                FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
                fragmentTransaction.replace(R.id.frame, fragment);
                fragmentTransaction.commitAllowingStateLoss();
            }
        };
EN

回答 4

Stack Overflow用户

发布于 2019-06-16 20:14:49

我发现myFragment.onDetach中的一段代码导致了这一点:

这是Getting the error "Java.lang.IllegalStateException Activity has been destroyed" when using tabs with ViewPager的一种变通方法

代码语言:javascript
运行
复制
        try {
            Field childFragmentManager = Fragment.class.getDeclaredField("mChildFragmentManager");
            childFragmentManager.setAccessible(true);
            childFragmentManager.set(this, null);
        } catch (NoSuchFieldException e) {
            throw new RuntimeException(e);
        } catch (IllegalAccessException e) {
            throw new RuntimeException(e);
        }

现在,在androidx中,这种变通方法是不需要的。

票数 42
EN

Stack Overflow用户

发布于 2019-06-18 15:58:09

在我的模块的gradle中,我通过恢复

代码语言:javascript
运行
复制
implementation 'androidx.appcompat:appcompat:1.1.0-beta01'

代码语言:javascript
运行
复制
implementation 'androidx.appcompat:appcompat:1.1.0-alpha05'

(上面关于childFragmentManager的回答没有帮助。)

票数 5
EN

Stack Overflow用户

发布于 2019-10-01 20:45:46

我在这个问题上徘徊了一天,终于找到了解决方案。这里我使用的是gradle

代码语言:javascript
运行
复制
implementation 'androidx.constraintlayout:constraintlayout:1.1.2'

我用下面的代码替换了我的片段。

代码语言:javascript
运行
复制
 getActivity().getSupportFragmentManager().beginTransaction().detach(new    KiKorbo()).replace(R.id.calendar1, caldroidFragment).attach(caldroidFragment)
            .addToBackStack(null).commit();

这里,KiKorbo.java是我的父片段,我替换了caldroidFragment。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56618453

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档