ViewPager 中同一片段的多个实例有问题吗?

Issues with multiple instances of same Fragment in ViewPager?

上下文: 子片段 1

想要的结果: 在 onRefresh 中我想要 x == z,在这个例子中 z 是 1.

有问题的结果:

解决方案 删除 SubFragment1 的多个实例 FragmentPagerAdapter

@Override
    public Fragment getItem(int position) {
        switch (position) {
            case 0:
                return new SubFragment1(...);
            case 1:
                return new SubFragment1(...);
            case 2:
                return new SubFragment1(...);
            default:
                return null;
        }
    }

问题: 知道如何在 viewPager 中使用一个片段的多个实例会破坏片段的逻辑或标准生命周期行为吗?没有什么是静态的,变量是私有的。

是的,伙计,我曾经陷入这样的困境。

所以我所做的是,我使用了五个相同的 SubFragment 实例,我遇到了麻烦。基本上我有五个不同的屏幕,它们具有相似的功能(职责)但几乎相同的布局(UI 设计)。 因此,我决定使用相同的 SubFragment 只是为了促进 代码可重用性 的原则。

一开始,需求很小,一切都很顺利,但后来随着变化(需求)的不断堆积,我做噩梦了。

举个例子:

所以假设有一个方法 checkLocationAndNotify() 将检查位置是否可用,如果没有找到位置将显示 Dialog

现在我希望仅当 SubFragment 的第三个实例在 ViewPager 打开时调用此方法(用户滑动并在 ViewPager 到达第三个 Child) .

所以我把这个方法调用放到了SubFragmentonViewCreated()生命周期方法中。繁荣这是我的第一个麻烦。一旦用户打开任何 ViewPager child,无论 SubFragment 的实例如何,都会调用此方法并每次都显示 LocationDialog

为了解决这个问题,我不得不检查 ViewPager 中的 childPosition。 此外,无论我希望某些逻辑仅在 SubFragment.

的某个实例上起作用,我都必须重复这一点

黄金忠告:

如果处理也在 ViewPager 内的 Fragments(即使责任略有不同),请使用不同的 Fragments促进代码可重用性的单一责任原则