首页 > 解决方案 > 方法调用 getActivity().getSupportFragmentManager() 可能会在片段中产生空指针异常

问题描述

“这是我的代码和图片链接”

MyFragment newFragment = new MyFragment();


    FragmentTransaction ft = getActivity().getSupportFragmentManager().beginTransaction();

    ft.setCustomAnimations(android.R.anim.slide_in_left, android.R.anim.slide_out_right);
    ft.replace(R.id.guide_frame_container, newFragment)
            .addToBackStack(null)
            .commit();

在此处输入图像描述

标签: javaandroidandroid-fragmentsfragmentandroid-fragmentactivity

解决方案


这是一个 Android Studio 警告,没有错误。但是你应该关心它!

getActivity()不保证总是返回一个活动。例如,当片段已创建但尚未附加时,即getActivity()在构造函数中调用时将始终返回 null。同样getSupportFragmentManager()需要附加片段,以获取其相应的片段主机。

因此,您必须确保仅在众所周知的上下文中调用这些函数,在该上下文中保证附加片段(如在onAttached()函数中),或者您必须将调用包装在空检查中

此外,绝对不清楚在哪里调用这些函数。我假设,您尝试调用那些static Fragment newInstance()将为您创建片段的函数内部。但是,您永远不应该尝试将片段附加到那里。它应该由主机活动完成。


推荐阅读