IllegalStateException:片段 YoutubeLessonFragment 未附加到上下文

IllegalStateException: Fragment YoutubeLessonFragment not attached to a context

我在我的一个片段中使用 YouTubePlayerSupportFragment 但我没有在布局文件中使用它,而是以编程方式初始化它。一些用户在运行时遇到此崩溃:

Fatal Exception: java.lang.IllegalStateException: Fragment YoutubeLessonFragment{3a2e875} not attached to a context.
       at android.support.v4.app.Fragment.requireContext(Fragment.java:614)
       at android.support.v4.app.Fragment.getResources(Fragment.java:678)
       at android.support.v4.app.Fragment.getString(Fragment.java:700)
       at com.musicmuni.riyaz.youtubelesson.YoutubeLessonFragment.loadYoutubeVideo(YoutubeLessonFragment.java:168)
       at com.musicmuni.riyaz.youtubelesson.YoutubeLessonPresenter.onModuleLoaded(YoutubeLessonPresenter.java:188)
       at com.musicmuni.riyaz.data.AppDataRepositoryImpl.run(AppDataRepositoryImpl.java:187)
       at android.os.Handler.handleCallback(Handler.java:754)
       at android.os.Handler.dispatchMessage(Handler.java:95)
       at android.os.Looper.loop(Looper.java:163)
       at android.app.ActivityThread.main(ActivityThread.java:6221)
       at java.lang.reflect.Method.invoke(Method.java)
       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:904)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:794)

我初始化 youtube 片段的代码是这样的:

private YouTubePlayerSupportFragment youtubePlayerFrag;
.........
    public void loadYoutubeVideo(String videoId) {
            mVideoId = videoId;
            if(getContext() != null) {
                youtubePlayerFrag = YouTubePlayerSupportFragment.newInstance();
                youtubePlayerFrag.initialize(getString(R.string.youtube_api_developer_key),
                        this);
                getChildFragmentManager().beginTransaction().add(R.id.flYoutubeVideoHolder,
                        youtubePlayerFrag).commit();
            }
        }

其中 loadYoutubeVideo(...) 从加载所需视频 ID 的后台 运行 线程获取回调。这里有什么指示吗?

可能是您的 Fragment 在您调用 getString() 方法时未附加到 activity

因为文档说:

Fragments now have requireContext(), requireActivity(), requireHost(), and requireFragmentManager() methods, which return a NonNull object of the equivalent get methods or throw an IllegalStateException.

您可能想通过调用片段的 isAdded() 方法来检查片段是否附加到 activity。

您也可以将参数直接传递给 newInstance(..args..) 而不是创建 initialise() 方法。