gpt4 book ai didi

android - 非法状态异常 : Fragment YoutubeLessonFragment not attached to a context

转载 作者:行者123 更新时间:2023-11-29 15:35:24 25 4
gpt4 key购买 nike

我在我的一个 fragment 中使用 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$2.onModuleLoaded(YoutubeLessonPresenter.java:188)
at com.musicmuni.riyaz.data.AppDataRepositoryImpl$10.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 fragment 的代码是这样的:

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 的后台运行线程获取回调。这里有什么指示吗?

最佳答案

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

因为文档说:

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

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

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

关于android - 非法状态异常 : Fragment YoutubeLessonFragment not attached to a context,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51456210/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com