The situation is this - there is a fragment of fragmentBoss , in it there is a ViewPager with 3 pages (fragments). I go to the fragmentBoss fragmentBoss - and the ViewPager displays the fragments as it should, then I go out and go to another fragment ( Settings ), and I go back to the fragmentBoss fragmentBoss from the ViewPager and the pages are empty, updated only after browsing.
private FragmentManager fragmentManager; private android.support.v4.app.FragmentTransaction transaction1; protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); fragmentManager=getSupportFragmentManager(); fragmentBoss= new FragmentBoss(); fragmentPoiskaIStarta = new FragmentPoiskaIStarta(); fragmentSettings = new FragmentSettings(); } Here is the method by which we go by fragments ( fragmentBoss , Settings ):
transaction1 = fragmentManager.beginTransaction(); switch (TipAnimacii) { case 1: { transaction1.replace(R.id.BigFragment, fragmentPoiskaIStarta); transaction1.commit(); mTextMessage.setText(R.string.title_home); anim = AnimationUtils.loadAnimation(getApplication(), R.anim.prozrahnost); mTextMessage.startAnimation(anim); break; } case 2: { transaction1.replace(R.id.BigFragment, fragmentBoss); transaction1.commit(); mTextMessage.setText(R.string.title_dashboard); anim = AnimationUtils.loadAnimation(getApplication(), R.anim.prozrahnost); mTextMessage.startAnimation(anim); break; } case 3: { transaction1.replace(R.id.BigFragment, fragmentSettings); transaction1.commit(); mTextMessage.setText(R.string.title_notifications); anim = AnimationUtils.loadAnimation(getApplication(), R.anim.prozrahnost); mTextMessage.startAnimation(anim); break; } } FragmentBoss class:
public class FragmentBoss extends Fragment { public static FragmentBoss newInstance() { FragmentBoss fragment = new FragmentBoss(); Bundle args = new Bundle(); fragment.setArguments(args); return fragment; } private TabLayout tabLayout; private ViewPager viewPager; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View v = inflater.inflate(R.layout.fragment_fragment_boss, container, false); viewPager =(ViewPager)v.findViewById(R.id.ViewPager); TablayautAdapter tablayautAdapterv=new TablayautAdapter(getActivity().getSupportFragmentManager()); viewPager.setAdapter(tablayautAdapterv); tabLayout=(TabLayout)v.findViewById(R.id.tablayout); tabLayout.setupWithViewPager(viewPager); return v; } TablayautAdapter class:
import android.support.v4.app.Fragment; import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentPagerAdapter; import android.support.v4.app.FragmentStatePagerAdapter; import android.util.Log; import com.example.kaz.io.Fragment.FragmentControl; import com.example.kaz.io.Fragment.FragmentControlCsene; public class TablayautAdapter extends FragmentStatePagerAdapter { private String[] tabs; public TablayautAdapter(FragmentManager fm) { super(fm); tabs=new String[]{ "TAB1", "TAB2", "TAB3", "TAB4" }; } @Override public CharSequence getPageTitle(int position) { return tabs[position]; } @Override public Fragment getItem(int position) { switch (position) { case 0: return FragmentControl.newInstance(); case 1: return FragmentControlCsene.newInstance(); case 2: return FragmentControlCsene.newInstance(); case 3: return FragmentControl.newInstance(); } return null; } @Override public int getCount() { return tabs.length; } } I partially understood my problem. I did as I was advised to do by Andriy Martsinkevych, for which he thanks a lot). But if you go into the FragmentBoss fragment, then go to another fragment, and then re-enter the error that occurs in the message below, crashes on the FragmentBoss . This problem is solved if the TablayautAdapter does not inherit from the FragmentStatePagerAdapter , but from the FragmentPagerAdapter and the error goes away and everything works as it should. However, the minus of all this is that the data in the fragments that are in the ViewPager are reset. If anyone knows a better way to write)
I go to the fragmentBoss fragmentBoss - and the ViewPager displays the fragments as it should, then I go to another fragment ( Settings ), and I go back to the fragmentBoss fragmentBoss with the ViewPager and an error occurs.
java.lang.NullPointerException at android.support.v4.app.FragmentManagerImpl.getFragment(FragmentManager.java:898) at android.support.v4.app.FragmentStatePagerAdapter.restoreState(FragmentStatePagerAdapter.java:215) at android.support.v4.view.ViewPager.onRestoreInstanceState(ViewPager.java:1452) at android.view.View.dispatchRestoreInstanceState(View.java:12012) at android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java:2645) at android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java:2651) at android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java:2651) at android.view.View.restoreHierarchyState(View.java:11990) at android.support.v4.app.Fragment.restoreViewState(Fragment.java:483) at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1358) at android.support.v4.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManager.java:1574) at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1641) at android.support.v4.app.BackStackRecord.executeOps(BackStackRecord.java:794) at android.support.v4.app.FragmentManagerImpl.executeOps(FragmentManager.java:2415) at android.support.v4.app.FragmentManagerImpl.executeOpsTogether(FragmentManager.java:2200) at android.support.v4.app.FragmentManagerImpl.optimizeAndExecuteOps(FragmentManager.java:2153) at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:2063) at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:725) at android.os.Handler.handleCallback(Handler.java:615) at android.os.Handler.dispatchMessage(Handler.java:92) at android.os.Looper.loop(Looper.java:137) at android.app.ActivityThread.main(ActivityThread.java:4856) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:511) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1007) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:774) at dalvik.system.NativeStart.main(Native Method)