簡體   English   中英

在ViewPager中從后堆棧中刪除片段並刷新以前查看的片段

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM