I have a main Activity with a fragment container. In this container I place a fragment with 2 more fragments in the form of Tabs (2 tabs). If you log into the application (authorization through Facebook) and immediately use Fragment with Tabs, the application crashes on the line at com.app.pollee.fragments.TopFragment.initTabs (TopFragment.java:107) When you re- enter the application, everything works fine!

java.lang.IllegalStateException: Activity has been destroyed at android.support.v4.app.FragmentManagerImpl.enqueueAction(FragmentManager.java:1470) at android.support.v4.app.BackStackRecord.commitInternal(BackStackRecord.java:634) at android.support.v4.app.BackStackRecord.commitAllowingStateLoss(BackStackRecord.java:617) at android.support.v4.app.FragmentPagerAdapter.finishUpdate(FragmentPagerAdapter.java:139) at android.support.v4.view.ViewPager.setAdapter(ViewPager.java:420) at com.app.pollee.fragments.TopFragment.initTabs(TopFragment.java:107) at com.app.pollee.fragments.TopFragment.access$000(TopFragment.java:25) at com.app.pollee.fragments.TopFragment$1.requestSuccess(TopFragment.java:83) at com.app.pollee.managers.ServerRequestManager$7.onResponse(ServerRequestManager.java:168) at com.app.pollee.managers.ServerRequestManager$7.onResponse(ServerRequestManager.java:150) at com.android.volley.toolbox.JsonRequest.deliverResponse(JsonRequest.java:72) at com.android.volley.ExecutorDelivery$ResponseDeliveryRunnable.run(ExecutorDelivery.java:99) at android.os.Handler.handleCallback(Handler.java:739) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:135) at android.app.ActivityThread.main(ActivityThread.java:5294) at java.lang.reflect.Method.invoke(Native Method) at java.lang.reflect.Method.invoke(Method.java:372) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:904) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:699) 

A fragment that is placed in the container of activity

  public class TopFragment extends Fragment { private View view; private Context fragmentContext; private FragmentActivity fragmentActivity; private static TopFragment fragment; //Синглтон public static TopFragment getInstance(){ if (fragment==null) { fragment = new TopFragment(); } return fragment; } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { if (view==null) { view = inflater.inflate(R.layout.fragment_top, container, false); } fragmentContext = getActivity(); fragmentActivity = (FragmentActivity) getActivity(); initTabs(); return view; } private void initTabs() { ViewPager viewPager = (ViewPager) view.findViewById(R.id.viewPager); TabLayout tabLayout = (TabLayout) view.findViewById(R.id.tabLayout); TabsPagerFragmentAdapter adapter = new TabsPagerFragmentAdapter(fragmentActivity.getSupportFragmentManager(), fragmentContext); viewPager.setAdapter(adapter); tabLayout.setupWithViewPager(viewPager); } } 

Tab adapter

 public class TabsPagerFragmentAdapter extends FragmentPagerAdapter { private String[] tabs; public TabsPagerFragmentAdapter(FragmentManager fm, Context context) { super(fm); tabs = context.getResources().getStringArray(R.array.tab_top_array); } @Override public CharSequence getPageTitle(int position) { return tabs[position]; } @Override public Fragment getItem(int position) { switch (position){ case 0: FirstTopTabsFragment fist = new FirstTopTabsFragment(); return fist; case 1: SecondTopTabsFragment second = new SecondTopTabsFragment(); return second; } return null; } @Override public int getCount() { return tabs.length; } } 
  • And if instead of fragmentActivity.getSupportFragmentManager() take getChildFragmentManager() ? In general, putting a fragment into a fragment is a bad idea. Better ViewPager in a separate activation show. - Yuriy SPb
  • @Yuriy SPb and what then in the constructor TabsPagerFragmentAdapter write the first parameter? - Camel
  • Well, the designer, it seems, does not need to be changed. Just call it when you try to change the value ... I'm not sure what will happen. - YurySPb
  • Yes, and this check is absolutely unnecessary for me: if (view == null) - Yuriy Spb
  • @YuriSPb complains about the incompatibility of support.v4.app.FragmentManager; - Camel

0