在纵向模式下,我的ViewPager
有 3 个片段 A、B、C,但在横向模式下,它只有 2 个片段 A 和 C。所以我创建了 2 个FragmentStatePagerAdapter
s 代表每种模式。问题是当屏幕方向改变时,ViewPager
恢复并使用旧方向的先前片段。例如,当将方向从纵向更改为横向时,ViewPager
现在显示 2 个片段 A、B,而不是 A 和 C。我知道为什么会发生这种情况,但找不到一个好的解决方案。
我当前的解决方法是使用不同的 idViewPager
(例如: id/viewpager_portrait 用于纵向布局, id/viewpager_landscape 用于横向布局)以防止重复使用片段,但这会导致内存泄漏,因为旧片段不会被销毁并仍保留在内存中。
我尝试了一些解决方法,例如在活动中调用 super.onCreate(null)onCreate
,或删除片段ViewPager
在活动的onSaveInstanceState
但它们都会让我的应用程序崩溃。
所以我的问题是如何避免重复使用一个或多个片段FragmentStatePagerAdapter
方向何时改变?
任何帮助将不胜感激。预先感谢。
问题可能是内置的PagerAdapter
的实现Fragment
Android 提供的假设项目将保持不变,因此保留并重用对所有项目的基于索引的引用Fragment
添加到ViewPager
。这些参考文献通过FragmentManager
即使在之后Activity
(and Fragment
s) 由于配置更改或进程被终止而重新创建。
您需要做的是编写自己的实现PagerAdapter
将自定义标签与每个相关联Fragment
并存储Fragment
采用基于标签(而不是基于索引)的格式。在添加一个抽象方法以提供基于索引和getItem()
方法。当然,您必须删除孤立的/未使用的Fragment
在之前的配置中添加了ViewPager
(同时最好保持其状态)。
如果您不想自己实施整个解决方案,那么ArrayPagerAdapter
in the CWAC寻呼机 https://github.com/commonsguy/cwac-pager可以使用库来提供一个合理的实现,只需付出很少的努力。初始化后,您可以分离相关的Fragment
基于它提供的标签,并根据需要从适配器中删除/添加它。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)