2016-06-30 68 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。