上下文: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中使用一个片段的多个实例会破坏片段的逻辑或标准生命周期行为?没有什么是静态的,变量是私有的。
最佳答案
是的,伙计,我曾经一团糟。
所以我要做的是,我使用了五个相同SubFragment
实例,而我遇到了麻烦。基本上,我有五个具有相似功能(责任)但布局几乎相同(UI设计)的不同屏幕。
结果,我决定使用相同的SubFragment
只是为了促进代码可重用性原则。
最初,需求很小,并且一切都很顺利,但是后来随着变更(要求)不断堆积,我不得不进行噩梦般的管理。
让我举一个例子:
因此,假设有一个方法checkLocationAndNotify()
将检查位置是否可用,如果找不到位置,则会显示Dialog
。
现在,我希望仅当我的SubFragment
的第三个实例在ViewPager
上打开时(用户滑动并在ViewPager
上到达第三个Child时)才调用此方法。
因此,我将此方法调用放置在onViewCreated()
的SubFragment
生命周期方法中。繁荣,这是我的第一个麻烦。用户打开任何ViewPager
子级后,无论SubFragment
的实例如何,都将调用此方法,并且每次都会显示LocationDialog
。
为了解决这个问题,我必须对childPosition
中的ViewPager
进行检查。
另外,我只想在某些SubFragment
实例上使用某些逻辑的地方就必须重复此操作。
黄金忠告:
如果在Fragments
内处理ViewPager
(即使职责稍有不同),也请使用不同的Fragments
,并提倡“单一职责”原则而非“代码可重用性”。