1

短縮版:

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) を設定しました

誰でも助けることができますか?

4

0 に答える 0