FragmentPagerAdapter 无法恢复 listfragment 属性

问题描述 投票:0回答:2

我正在开发一个由 3 个片段组成的 Android 应用程序;其中之一将是 ListFragment,其内容将取决于其他 Fragment 上发生的情况。我使用 ViewPager 对象使用户在片段之间切换;这是它的适配器类:

private class SwypePagerAdapter extends FragmentPagerAdapter{
    private Fragment[] tabFragments; 

    public SwypePagerAdapter(FragmentManager fm) {
        super(fm);
        tabFragments=new Fragment[NUMBER_OF_TABS];
        tabFragments[0]= Fragment.instantiate(StatCalculatorActivity.this, InsertFrag.class.getName());
        tabFragments[1]= Fragment.instantiate(StatCalculatorActivity.this, ResultFrag.class.getName());
        tabFragments[2]= Fragment.instantiate(StatCalculatorActivity.this, ValuesFrag.class.getName());
    }

    @Override
    public Fragment getItem(int position) {
        return tabFragments[position];
    }

    @Override
    public int getCount() {
        return NUMBER_OF_TABS;
    }

}

一切都工作得很好,直到 Activity 被销毁然后重新创建。此后 listFragment 看起来已锁定,它不会更新其数据,直到我销毁并重新创建该片段上的活动。这是怎么回事?怎样才能恢复呢?

更新: 我不认为我解释了我的真正意思。看起来在我销毁并重新创建 Activity 后,片段不再是以前的样子了;就好像旧的和新的重叠了,他们之间不能再沟通了...就像我失去了他们的参考文献,但他们仍然在那里...

android onresume android-listfragment fragmentpageradapter
2个回答
1
投票

如果你想保持数据原样而不破坏,你可以在你的PagerAdapter中这样注释

@Override
    public void destroyItem(ViewGroup container, int position, Object object) {
        // TODO Auto-generated method stub
        //super.destroyItem(container, position, object);
    }

0
投票

除非将片段设置为保留,否则片段将随活动一起创建和销毁。为了维护您的数据,我建议使用以下两种方法之一:

  • 使其可序列化
  • 将其存储在您在活动的 onCreate 上连接到的保留缓存片段中

第二种方法可以通过制作一个片段并在片段的 onCreate 中添加以下内容并在旋转时销毁 Activity 之前传递数据来实现

@Override
public void onCreate(Bundle savedInstanceState) {
    setRetainInstance(true);
    super.onCreate(savedInstanceState);
}
© www.soinside.com 2019 - 2024. All rights reserved.