【问题标题】:Removing fragments from the backstack in a viewpager & refreshing previously viewed fragments从 viewpager 中的 backstack 中删除片段并刷新以前查看的片段
【发布时间】:2016-06-30 23:40:00
【问题描述】:

我正在使用浏览器作为调查问卷。用户在前 8 个片段中输入他们的答案,然后他们的答案显示在第 10 个片段(OverviewFragment)中。这一切都很好。我有一个问题是当用户返回到过去的片段时,即:片段 4 并更改答案,如果他们返回到第 10 个片段,它不会更新。我确定这是一个生命周期/backstack 问题,但不确定如何在 viewpager 中将片段从 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;
    }

}

【问题讨论】:

    标签: android android-fragments android-lifecycle


    【解决方案1】:

    当将先前创建的 Fragment 导航回时,如何恢复 Fragment 的状态可能存在问题 - 您的 FragmentStatePagerAdapter 是否真的在创建一个新的片段实例,或者重用已经创建的旧片段实例,以及使用它以前的 Bundle args?

    在创建 Fragment 并将完整的 Parcelable 对象作为 UI 模型传递以在填充 Fragment 的 UI 时使用时,我遇到了类似的问题。一旦将 Fragment 导航回,在重新创建 Fragment 的 View 时使用原始 Parcelable(因此,我在最初创建 Fragment 时设置的 Bundle args 中的旧原始对象)。为了解决这个问题,我将一个 ID 引用传递给它的 Bundle args 中的每个片段(所以,只是一些整数或其他东西),它映射到我试图在 UI 中显示的模型对象的内存副本中的当前.

    因此,即使我的 Fragment 是使用相同的包 args 重新创建的,我也会使用 SomeInMemoryHelperObjectContainingMyMap.get(ID) 来获取该对象的最新版本来填充 UI。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多