2016-06-30 4 views
0

나는 뷰포트를 설문지로 사용하고 있습니다. 사용자가 처음 8 개 단편에서 대답을 입력하면 응답이 10 번째 단편 (OverviewFragment)에 표시됩니다. 모두 잘 작동합니다. 사용자가 이전 조각으로 돌아갈 때 즉, 조각 4 및 응답을 변경합니다. 조각이 업데이트되지 않은 10 번째 조각으로 돌아 가면 응답을 변경합니다. 이것은 lifecycle/backstack 문제이지만 뷰 페이지에서 백 스택에서 조각을 걷어차는 방법을 확신 할 수 없습니다. 또는 프래그먼트를 지속적으로 새로 고치는 방법 일 수도 있습니다.뷰 페이지의 백 스택에서 조각을 제거하고 이전에 본 프래그먼트를 새로 고침

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 's 및 전체 Parcelable 개체를 UI 모델로 전달할 때 유사한 문제가 발생했습니다. 일단 Fragment가 다시 탐색되면 Fragment의 View를 다시 만들 때 원래의 Parcelable이 사용되었습니다 (그래서 Fragment를 초기 생성으로 설정 한 Bundle 인수의 이전 객체). 이 문제를 해결하기 위해 각 번들에 ID 참조를 전달했습니다. 번들 인수 대신 현재 할당 된 정수 (또는 일부 정수)가 UI에 표시하려고했던 모델 객체의 메모리 복사본에 매핑되었습니다. .

내 Fragment가 동일한 번들 args로 다시 작성 되었더라도 SomeInMemoryHelperObjectContainingMyMap.get (ID)을 사용하여 해당 객체의 가장 최신 버전을 가져 와서 UI를 채 웁니다.