いくつかのフラグメントを含むビューページャーがあり、フラグメントの UI を編集する必要があることに応じて、各フラグメントにモデル クラスを設定します。FragmentStatePagerAdapter にそのフラグメントを追加する前に、そのモデル クラスをコンストラクターでフラグメント化するように設定しました。私の問題は、画面を回転させた後、またはシステムがアプリケーションを強制終了して復元すると、システムによってフラグメントが再作成され、モデル クラスのインスタンスが失われることです。新しい FragmentStatePagerAdapter を設定しても、システムによって作成されたフラグメントが表示されます。フラグメントの新しいインスタンスを作成してビューページャーに配置する正しい方法はありますか? FragmentManagerからフラグメントを削除する、Adapterをviewpagerに再度追加する、FragmentStatePagerAdapterをFragmentPagerAdapterのみに変更するなど、多くのことを試してみましたが、何も役に立ちませんでした。
いくつかのリソースからローダーにモデルクラスをロードするアクティビティクラス:
List<Fragment> visibleFragment = new ArrayList<Fragment>();
for (Screen screen : wizard.screens) {
if (screen.visible) {
visibleFragment.add(new ScreenUI(screen));
}
}
viewPager.setAdapter(null);
viewPager.setAdapter(new WizardPagerAdapter(getSupportFragmentManager(), visibleFragment));
マイ FragmentStatePagerAdapter
public class WizardPagerAdapter extends FragmentPagerAdapter {
private final List<Fragment> mFragments;
private final int count;
public WizardPagerAdapter(FragmentManager fm, List<Fragment> fragments) {
super(fm);
mFragments = fragments;
count = mFragments.size();
}
@Override
public Fragment getItem(int index) {
return mFragments.get(index);
}
@Override
public int getCount() {
return count;
}
}