FragmentPagerAdapter无法恢复listfragment属性

时间:2012-09-14 15:18:26

标签: android onresume android-listfragment fragmentpageradapter

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

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看起来已锁定,在我销毁并重新创建此片段上的活动之前,它不会更新其数据。这是怎么回事?我该如何恢复它?

更新 我不认为我解释我的意思。看起来,在我销毁并重新创建活动后,碎片不再是以前的碎片;它就像旧的那些重叠新的,它们之间不能再相互沟通......就像我丢失了它们的参考,但它们仍然在那里......

2 个答案:

答案 0 :(得分:1)

如果您希望保持数据不会破坏,您可以在PagerAdapter

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

答案 1 :(得分:0)

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

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

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

@Override
public void onCreate(Bundle savedInstanceState) {
    setRetainInstance(true);
    super.onCreate(savedInstanceState);
}