gpt4 book ai didi

java.lang.IllegalStateException : Fragment not attached to a context 错误

转载 作者:行者123 更新时间:2023-11-29 23:45:53 26 4
gpt4 key购买 nike

我的 MainActivity 中有一个带有 viewpager 的 tablayout。

我的 PagerAdapter 看起来像这样:

public class MainActivityPagerAdapter extends PagerAdapter {

public MainActivityPagerAdapter(FragmentManager fm, int numOfTabs) {
super(fm, numOfTabs);
}

@Override
public Fragment getItem(int position) {

switch (position) {
case 0:
return new StoresFragment();
case 1:
return new OrdersFragment();
default:
return null;
}
}
}

我正从这样的另一项 Activity 回来:

Intent intent = new Intent(context, MainActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
finish(); //finishAffinity();

但是后来我在 MainActivity 的 viewpager 中的一个 fragment 中得到了 java.lang.IllegalStateException

我阅读了很多相关问题并尝试解决这个问题。据说,当在 PagerAdapter 之外保留对 Fragment 的引用时,就会发生这种情况。但我没有这样做,正如您在我的代码中看到的那样。

有人知道我做错了什么吗?

编辑 - 堆栈跟踪

FATAL EXCEPTION: main
Process: com.lifo.skipandgo, PID: 23665
java.lang.IllegalStateException: Fragment OrdersFragment{42c2a740} 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 com.lifo.skipandgo.activities.fragments.OrdersFragment$1.results(OrdersFragment.java:111)
at com.lifo.skipandgo.connectors.firestore.QueryResult.receivedResult(QueryResult.java:37)
at com.lifo.skipandgo.controllers.UserController$2.onUpdate(UserController.java:88)
at com.lifo.skipandgo.connectors.firestore.QuerySubscription.onEvent(QuerySubscription.java:59)
at com.lifo.skipandgo.connectors.firestore.QuerySubscription.onEvent(QuerySubscription.java:18)
at com.google.firebase.firestore.zzg.onEvent(Unknown Source)
at com.google.firebase.firestore.g.zzh.zza(SourceFile:28)
at com.google.firebase.firestore.g.zzi.run(Unknown Source)
at android.os.Handler.handleCallback(Handler.java:733)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:146)
at android.app.ActivityThread.main(ActivityThread.java:5653)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1291)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1107)
at dalvik.system.NativeStart.main(Native Method)

编辑:有趣的是,当错误发生时, View 已确定加载。因为在 fragment 再次显示后大约 10-15 秒后发生错误。我在我的 orderFragment 中出现错误:

orders = new QueryResult<UserOrder>(UserOrder.class) {
@Override
public void results(List<UserOrder> results) {
orderLoadingMessage.setBackgroundColor(getResources().getColor(R.color.green));
}
}

我在 onCreateView 中执行此操作,此结果在 View 加载后大约 10-15 秒出现。

最佳答案

问题似乎是,您的 fragment 正在监听某些事件(通过 UserController 和 QueryResult),并且这些事件在 fragment 附加到上下文之前被触发。

尝试在 fragment 分离时取消注册 fragment ,并在附加后再次注册 fragment (LiveData 也可以帮助解决这个问题)。另一种方法可能是在分离时接收和存储事件,并且仅在附加后处理它。

关于java.lang.IllegalStateException : Fragment not attached to a context 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51421865/

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