空对象引用上的'boolean androidx.fragment.app.FragmentManagerImpl.isDestroyed()'

9
我收到了这个错误崩溃。
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method boolean androidx.fragment.app.FragmentManagerImpl.isDestroyed()' on a null object reference

当活动停止时以及当我从FragmentTransaction中删除片段时,我添加了一个方法。
@Override
public void onDetach() {
    super.onDetach();

    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);
    }
}

向我的所有片段发送,但这并没有帮助

我的代码

FragmentTransaction t = getSupportFragmentManager().beginTransaction();
                    //t.replace(R.id.calendar1, weekendCaldroidFragment);
                    t.detach(weekendCaldroidFragment).add(R.id.calendar1, weekendCaldroidFragment).attach(weekendCaldroidFragment).commitNowAllowingStateLoss();

如果您在Activity中使用反射调用方法,那么当您从未调用的Framework生命周期方法中获得空指针时,不应感到惊讶。 - Blundell
我需要做什么? - user10016062
1个回答

30

onDetach()中删除所有这些代码-在任何最近版本的Fragment上都不是必需的,正是这些代码导致了崩溃。


看起来你没从所有地方删除它。变量本身是非空的,所以唯一的可能是通过反射将其设置为null。 - ianhanniballake
@ianhanniballake,你救了我的命,伙计+1。 - Muhammad Imran
1
当我使用Caldroid Fragment并且该Fragment被销毁时,才会出现此问题。我的应用程序在Androidx兼容,但CaldroidFragment库不是。任何帮助将不胜感激。 - Yash Bhardwaj
4
谢谢您的评论。我正在尝试解决问题。在查看官方网页后,发现有评论可以解决问题:https://github.com/vpotvin/CaldroidX - Ucdemir
从BaseFragment中删除onDetach(),它的作用已经实现。谢谢。 - Sanjayrajsinh

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