短縮版:
ViewPager(FragmentStatePagerAdapterを使用)を含むフラグメントでアクティビティがあり、再開すると、このフラグメントが再作成されます。バックプレスでフラグメントに戻り、状態とビューページャーを復元するにはどうすればよいですか?
詳細:
アクティビティのメソッド onCreate(..) で、FrameLayout (R.id.themesFragmentsLayout) を使用したアクティビティがあります。
if (savedInstanceState == null) {
FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
ThemesFragment fragment = new ThemesFragment();
fragmentTransaction.replace(R.id.themesFragmentsLayout, fragment, ThemesFragment.TAG);
fragmentTransaction.commit();
}
ThemesFragment には、3 つのフラグメントを保持する FragmentStatePagerAdapter を持つ ViewPager のみが含まれます。
public Fragment getItem(int position) {
switch (position) {
case ID_THEME_PAST:
return new ThemePastFragment();
case ID_THEME_OF_DAY:
return new ThemeOfDayFragment();
case ID_THEME_UPCOMING:
return new ThemeUpcomingFragment();
default:
return null;
}
}
たとえば、ThemeOfDayFragment では、ユーザーがいくつかのボタンをクリックすると、(ViewPager を保持する) ThemesFragment を別のボタン (たとえば、ThemeDetails) に変更できます。
FragmentTransaction fragmentTransaction = getActivity().getSupportFragmentManager().beginTransaction();
fragmentTransaction.addToBackStack(newFragment.getClass().getSimpleName());
fragmentTransaction.replace(((AboutMyStyleApplication) getActivity().getApplication()).getCurrentFragmentsLayoutId(), newFragment, newFragment.getClass().getSimpleName());
fragmentTransaction.commitAllowingStateLoss(); // or fragmentTransaction.commit(); - same result
しかし、彼が戻ってきたとき (たとえば、戻るキーを押すことによって)、ThemesFragment が再作成され、ViewPager 内のすべてのフラグメントが再作成されます。ThemesFragment で setRetainInstance(true) を設定しました
誰でも助けることができますか?