[英]Removing fragments from the backstack in a viewpager & refreshing previously viewed fragments
我正在使用viewpager作為問卷。 用戶在前8個片段中輸入他們的答案,然后在第10個片段(OverviewFragment)中顯示他們的答案。 一切都很好。 我有一個問題是用戶何時返回到過去的片段,即:片段4並更改答案,如果他們返回到第十個片段,它不會更新。 我確定這是生命周期/后退問題,但是不確定如何在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;
}
}
導航回先前創建的Fragment時,如何還原Fragment的狀態可能是一個問題-FragmentStatePagerAdapter是真正創建一個新的Fragment實例,還是重用已經創建的舊實例,並使用以前的捆綁參數?
創建Fragment並傳遞完整的Parcelable對象作為填充Fragment UI時要使用的UI模型時,我遇到了類似的問題。 一旦將片段導航回去,在重新創建片段的視圖時將使用原始的Parcelable(因此,我在初始創建時在片段上設置的Bundle args中的舊原始對象)。 為了解決這個問題,我在ID中引用了每個Fragment的Bundle args中的每個Fragment(所以,只是一些整數或某物),該ID映射到了當前要在UI中顯示的模型對象的內存副本中。
因此,即使我的Fragment是使用相同的bundle args重新創建的,我仍將使用SomeInMemoryHelperObjectContainingMyMap.get(ID)獲取該對象的最新版本以填充UI。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.