There is a MainActivity in which there is onNavigationItemSelected(MenuItem item) through which fragments are launched, activity with settings and a dialog
@SuppressWarnings("StatementWithEmptyBody") @Override public boolean onNavigationItemSelected(MenuItem item) { int id = item.getItemId(); FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); if (id == R.id.nav_select_words) { ft.replace(R.id.mainFrame, fSelectWords); } else if (id == R.id.nav_learn_words) { ft.replace(R.id.mainFrame, fLearnWords); } else if (id == R.id.nav_repetition_words) { ft.replace(R.id.mainFrame, fRepetitionWords); } else if (id == R.id.nav_see_all_words) { ft.replace(R.id.mainFrame, fSeeAllWords); } else if (id == R.id.nav_slide_all_words) { ft.replace(R.id.mainFrame, fSlideAllWords); } else if (id == R.id.nav_settings) { startActivity(new Intent(MainActivity.this, SettingsActivity.class)); } else if (id == R.id.nav_about_the_program) { AlertDialog dialog = DialogScreen.getDialog(this, DialogScreen.IDD_ABOUT); dialog.show(); } ft.commit(); DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); drawer.closeDrawer(GravityCompat.START); return true; } The problem is the following - when launching the application and then opening the nav_slide_all_words fragment via the menu item. The nav_slide_all_words fragment opens, the slides are scrolling. If you go to another fragment through the menu and then return to this, the application crashes with this description:
12-28 09:43:35.727 25924-25924/** W/dalvikvm: threadid=1: thread exiting with uncaught exception (group=0xa6321288) 12-28 09:43:35.727 25924-25924/** E/AndroidRuntime: FATAL EXCEPTION: main java.lang.NullPointerException at android.support.v4.app.FragmentManagerImpl.getFragment(FragmentManager.java:667) at android.support.v4.app.FragmentStatePagerAdapter.restoreState(FragmentStatePagerAdapter.java:211) at android.support.v4.view.ViewPager.onRestoreInstanceState(ViewPager.java:1319) at android.view.View.dispatchRestoreInstanceState(View.java:11910) at android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java:2584) at android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java:2590) at android.view.View.restoreHierarchyState(View.java:11888) at android.support.v4.app.Fragment.restoreViewState(Fragment.java:468) at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1094) at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1248) at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:738) at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1613) at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:517) 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:4745) 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:786) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) at dalvik.system.NativeStart.main(Native Method) fragment code nav_slide_all_words
public class FragmentSlideAllWords extends Fragment { static final String TAG = "myLogs"; static final int PAGE_COUNT = 500; ViewPager pager; PagerAdapter pagerAdapter; private SharedPreferences prefs; boolean pref_key_check_animation; final String PAGE_CURRENT = "page_current"; public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View myView = inflater.inflate(R.layout.fragment_slide_words, container, false); // меняем заголовок тулбара ((AppCompatActivity) getActivity()).getSupportActionBar().setTitle(R.string.nav_slide_all_words); ((AppCompatActivity) getActivity()).getSupportActionBar().setSubtitle(""); // подключаем преференсе prefs = PreferenceManager.getDefaultSharedPreferences(getActivity()); pref_key_check_animation = prefs.getBoolean("pref_key_check_animation", true); pager = (ViewPager) myView.findViewById(R.id.fragment_slide_words_pager); pagerAdapter = new MyFragmentPagerAdapter(getChildFragmentManager()); pager.setAdapter(pagerAdapter); int pageCurrent = prefs.getInt(PAGE_CURRENT, 0); pager.setCurrentItem(pageCurrent); // показываем с определенной страницы // отключаем или подключаем анимацию перехода if (pref_key_check_animation) { pager.setPageTransformer(true, new ZoomOutPageTransformer()); } return myView; } private class MyFragmentPagerAdapter extends FragmentStatePagerAdapter { public MyFragmentPagerAdapter(FragmentManager fm) { super(fm); } @Override // Адаптер страниц также требует, чтобы вы реализовали getCount() метод, который возвращает количество страниц, которые адаптер будет создать public int getCount() { return PAGE_COUNT; } @Override // метод для предоставления экземпляров FragmentSlideAllWords_ViewPager как новых страниц public Fragment getItem(int position) { Log.d(TAG, "public Fragment getItem(int position )" + position); return FragmentSlideAllWords_ViewPager.newInstance(position); } } @Override public void onDetach() { super.onDetach(); // сохраняем номер текущей карточки SharedPreferences.Editor ed = prefs.edit(); ed.putInt(PAGE_CURRENT, pager.getCurrentItem()); ed.commit(); Log.d(TAG, "FragmentSlideAllWords onDetach()"); }
Android API- Vladyslav Matviienko