我在我的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;
}
}
}
我从另一个类似的活动回来了:
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之外保留对Fragments的引用,就会发生这种情况。但是,正如您在我的代码中所看到的那样,我没有这样做。
有人知道我做错了什么吗?
编辑 - Stacktrace
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)
编辑: 有趣的是,当错误发生时,视图肯定已经加载。因为错误出现在片段再次显示后大约10-15秒。我在我的 orderFragment 中遇到了这个错误:
orders = new QueryResult<UserOrder>(UserOrder.class) {
@Override
public void results(List<UserOrder> results) {
orderLoadingMessage.setBackgroundColor(getResources().getColor(R.color.green));
}
}
我在onCreateView
中执行此操作,该结果将在视图加载后约10-15秒钟内出现。
new StoresFragment();
吗? - Basil BattikhiMainActivity.context
是什么,为什么要使用它? - AskNileshgetResources()
上,它需要上下文。如果您将orderLoadingMessage.setBackgroundColor
移动到onAttach回调中,则可能会解决此问题。请注意,有两种onAttach方法(一种已弃用),如果您支持4.0之前的设备,则也要查看它。至于为什么会发生这种情况,我不知道。在调用getResources()
时遇到了相同的问题,当时是在onStart中。 - Ankit