0

我有带有一些片段的 viewpager,我根据应该编辑片段的 UI 为每个片段设置我的模型类。在我将该片段添加到 FragmentStatePagerAdapter 之前,我在构造函数中设置为片段的那个模型类。我的问题是,在旋转屏幕后或当系统杀死我的应用程序并恢复它时,我的片段被系统重新创建并且我的模型类实例丢失了。即使我设置了新的 FragmentStatePagerAdapter,系统创建的片段也是可见的。是否有任何正确的方法可以实现我创建片段的新实例并将它们放入 viewpager 中?我尝试了很多想法,例如从 FragmentManager 中删除片段,再次将适配器添加到 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;
}
}
4

2 回答 2

1

尝试将 Manifest android:configChanges="orientation|keyboardHidden|screenSize" 添加到活动中。

或类似的东西

public class ViewPagerTaskAdapter extends FragmentStatePagerAdapter {
Map<Integer, FragmentViewTask> fragmentsTask = new HashMap<Integer, FragmentViewTask>();
@Override
    public Fragment getItem(int arg0) {
        FragmentViewTask myFragment = FragmentViewTask.newInstance(arg0,
                tasks.get(arg0));
        fragmentsTask.put(arg0, myFragment);
        return myFragment;
    }

    @Override
    public void destroyItem(ViewGroup container, int position, Object object) {
        super.destroyItem(container, position, object);
        fragmentsTask.remove(position);
    }
        public FragmentViewTask getFragment(int key) {
        return fragmentsTask.get(key);
    }

    @Override
    public int getCount() {
        if (tasks != null)
            return tasks.size();

        return 0;
    }

}
于 2013-09-04T08:23:26.837 回答
0

你试过onRetainInstance(true)在你的上使用Fragments吗?

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setRetainInstance(true);    
}
于 2013-09-04T14:17:42.010 回答