2016-06-30 43 views
0

我正在使用viewpager作为调查问卷。用户在前8个片段中输入他们的答案,然后他们的答案显示在第10个片段(OverviewFragment)中。这一切都很好。我有一个问题的问题是当用户返回到过去的片段,即:片段4并更改答案,如果他们返回到它不更新的第10个片段。我确定这是一个生命周期/后台堆栈问题,但不确定如何在viewpager中将碎片从堆栈中踢出。或者也许只是一种确保片段不断刷新的方法?在viewpager中删除碎片并刷新以前查看过的碎片

public class SectionsPagerAdapter extends FragmentStatePagerAdapter { 

    private int fragmentCount = 11; 

    public SectionsPagerAdapter(FragmentManager fm) { 
     super(fm); 
    } 

    @Override 
    public Fragment getItem(int position) { 
     switch (position){ 
      case 0: 
       return DemoFragment.newInstance(); 
      case 1: 
       return PreliminaryQuesFragment.newInstance(); 
      case 2: 
       return QuestionOneFragment.newInstance(); 
      case 3: 
       return QuestionTwoFragment.newInstance(); 
      case 4: 
       return QuestionThreeFragment.newInstance(); 
      case 5: 
       return QuestionFourFragment.newInstance(); 
      case 6: 
       return QuestionFiveFragment.newInstance(); 
      case 7: 
       return QuestionSixFragment.newInstance(); 
      case 8: 
       return StatementFragment.newInstance(); 
      case 9: 
       return OverviewFragment.newInstance(user.getTitle(), prelimAnswer, qOne, qTwo, 
         qThree, qFour, qFive); 
      case 10: 
       return GoodbyeFragment.newInstance(position); 
      default: 
       return null; 
     } 
    } 

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

} 

回答

0

很可能与你的碎片的状态是如何被恢复时,先前已创建的导航回到一个片段一个问题 - 是您FragmentStatePagerAdapter真正创建一个新片段的实例,或重复使用旧的它已经被创建,并使用它的前一个Bundle参数?

我在创建Fragment的时候遇到了类似的问题,并且在填充Fragment的UI时使用了一个完整的Parcelable对象作为UI模型。一旦片段被导航回来,在重新创建片段的视图时使用原始的Parcelable(所以,从我在片段上设置的Bundle args中的旧的原始对象,它是初始创建的)。为了解决这个问题,我在它的Bundle args中传递了一个ID引用给它中的每个Fragment(而只是一些整数或者某个东西),映射到当前,在模型的对象拷贝中我试图在UI中显示。

因此,即使我的Fragment被重新创建了相同的bundle args,我也会使用SomeInMemoryHelperObjectContainingMyMap.get(ID)来获取该对象的最新版本来填充UI。