2016-06-30 6 views
0

私はアンケートとしてビューページを使用しています。ユーザーは最初の8つのフラグメントで回答を入力し、その回答は10番目のフラグメント(OverviewFragment)に表示されます。それはすごくうまくいっています。私が質問している問題は、ユーザーが過去の断片、すなわち:断片4に戻ったとき、そして断片が更新されない10番目の断片に戻ると答えが変わるときです。私はこれがライフサイクル/バックスタックの問題だと確信していますが、ビューページャのバックスタックからフラグメントを取り除く方法が不明です。フラグメントが常に更新されているかどうかを確認するには?ビューページのバックスタックからフラグメントを削除し、以前に表示されたフラグメントをリフレッシュする

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が本当にNEWフラグメント・インスタンスを作成し、またはそれはすでにだ古いものを再利用しています以前のバンドル引数を使用していますか?

FragmentのUIを作成するときに、Fragmentを作成し、完全なParcelableオブジェクトをUIモデルとして渡すときに、同様の問題が発生しました。フラグメントが再びナビゲートされると、元のパーセルブルは、フラグメントのビューを再作成するときに使用されました(つまり、最初の作成時にフラグメントに設定されたバンドル引数の古いオブジェクトです)。この問題を回避するために、私はそれぞれのフラグメントのID参照を代入しました。バンドルの代わりに(現在はマップされている整数や何か)、UIの中で表示しようとしていたモデルオブジェクトのメモリコピー。

私のFragmentが同じバンドルargsで再作成されたとしても、私はSomeInMemoryHelperObjectContainingMyMap.get(ID)を使用して、そのオブジェクトの最新バージョンを取得してUIを生成します。

関連する問題