【问题标题】:Issues with multiple instances of same Fragment in ViewPager?ViewPager 中相同片段的多个实例的问题?
【发布时间】:2019-12-20 04:05:50
【问题描述】:

上下文: SubFragment1

期望的结果: 在 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 中使用一个片段的多个实例会破坏片段的逻辑或标准生命周期行为吗?没有什么是静态的,变量是私有的。

【问题讨论】:

  • ViewPager 中使用同一Fragment 类的多个实例没有固有问题。如果您遇到问题,您需要提供一个 minimal reproducible example 来演示该问题以及详细说明。具体来说,图表不足以让我们知道出了什么问题。
  • 我只是想知道是否有人有类似的经历,或者知道在这种情况下片段生命周期的任何奇怪行为。
  • “奇怪”是相当主观的。如果您不知道ViewPagerFragments 是如何工作的,那么几个不同的事情可能看起来很奇怪。实际上,尽管图表非常漂亮,但很难说出您所描述的内容。
  • 好点。我已经阅读了 android 文档中的理论,但可以从其他人的经验中学到更多。
  • 我可以知道 SubFragment1 中的 x 静态变量吗?

标签: java android android-fragments android-lifecycle fragment-lifecycle


【解决方案1】:

是的,伙计,我曾经陷入过这样的混乱。

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

最初,需求很小,一切都很顺利,但后来随着变更(需求)不断增加,我在管理它们时做噩梦。

让我举个例子:

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

现在我希望仅当我的第三个SubFragment 实例将在ViewPager 上打开时才调用此方法(用户滑动并在ViewPager 上到达第三个孩子)。

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

为了解决这个问题,我必须在ViewPager 中检查childPosition。 此外,我必须在我希望某些逻辑仅在 SubFragment 的某个实例上起作用的任何地方重复此操作。

黄金建议:

如果在ViewPager 内部处理Fragments(即使职责略有不同)请使用不同的Fragments 并且提倡单一职责原则而不是代码可重用性.

【讨论】:

  • @Dylan 这就是 SO 的用途。你不会犯同样的错误两次。
猜你喜欢
  • 2016-05-10
  • 1970-01-01
  • 2015-10-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多