问题是否在ViewPager中具有相同片段的多个实例?

问题描述 投票:0回答:1

Context: SubFragment1

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

问题结果:

My Result

解决方案删除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中使用一个片段的多个实例会破坏片段的逻辑或标准生命周期行为?没有什么是静态的,变量是私有的。

java android android-fragments android-lifecycle fragment-lifecycle
1个回答
1
投票

是的,伙计,我曾经一团糟。

所以我做的是,我使用了五个相同的SubFragment实例,但是我遇到了麻烦。基本上,我有五个具有相似功能(责任)但布局几乎相同(UI设计)的不同屏幕。结果,我决定使用相同的SubFragment只是为了促进Code Reusability的原理。

起初,需求很小,一切都很顺利,但是后来随着变更(要求)不断堆积,我做了噩梦般的管理。

让我举个例子:

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

现在,我只想在SubFragment上打开我的第三个实例ViewPager(用户轻扫并在ViewPager上到达第三个子代)时才调用此方法。

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

[要解决此问题,我必须对childPosition中的ViewPager进行检查。另外,我只想在某些逻辑上仅对SubFragment的特定实例起作用,就必须重复此操作。

黄金忠告:

如果在Fragments内部也处理ViewPager(甚至责任稍有不同),请使用不同的Fragments

在代码可重用性上促进单一责任原则
© www.soinside.com 2019 - 2024. All rights reserved.