上下文:SubFragment1

所需结果:
在onRefresh中,我希望x = = z,在示例中z为1。

有问题的结果:

java - 在ViewPager中具有相同 fragment 的多个实例有问题吗?-LMLPHP


删除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时)才调用此方法。

因此,我将此方法调用放置在onViewCreated()SubFragment生命周期方法中。繁荣,这是我的第一个麻烦。用户打开任何ViewPager子级后,无论SubFragment的实例如何,都将调用此方法,并且每次都会显示LocationDialog

为了解决这个问题,我必须对childPosition中的ViewPager进行检查。
另外,我只想在某些SubFragment实例上使用某些逻辑的地方就必须重复此操作。

黄金忠告:

如果在Fragments内处理ViewPager(即使职责稍有不同),也请使用不同的Fragments,并提倡“单一职责”原则而非“代码可重用性”。

10-08 00:46