我目前正在使用页面宽度为0.2的ViewPager同时显示5个视图。这在逻辑上需要从7开始的屏幕外限制,以便在视图之间平滑过渡。
一开始我使用了FragmentStatePagerAdapter,但我担心内存消耗和性能。这就是我现在只使用PagerAdapter来显示我的观点的原因。
我想要的(以及我拥有的):
<< - 查看|查看视图视图视图|查看 - >>
Android中还有其他方法来处理这个问题吗?我想过将LinearLayout与ScrollView一起使用,但我需要在滑动后“粘住”视图。而且我非常喜欢视图的自定义页面指示器。
此外:我应该在我的对象中保存(元素的)视图,还是应该在每次调用后重新创建它们(是的,我在destroyItem中删除它们)?
另一个问题:从FragmentStatePageAdapter切换到PagerAdapter是否正确?
答案 0 :(得分:1)
来自文件http://developer.android.com/reference/android/support/v4/app/FragmentStatePagerAdapter.html
使用Fragment管理每个页面的PagerAdapter的实现。该类还处理片段状态的保存和恢复。
当存在大量页面时,此版本的寻呼机更有用,更像列表视图。当页面对用户不可见时,它们的整个片段可能会被破坏,只保留该片段的保存状态。与FragmentPagerAdapter相比,这允许寻呼机保持与每个被访问页面相关联的更少内存,代价是在页面之间切换时可能产生更多开销。
因此,如果您有很多页面,使用FragementStatePageAdapter
会更好。 FragementStatePageAdapter
在内存管理方面更有效。
但是如果您想在屏幕外部缓存2页,无论FragmentStatePageAdapter
和PageAdapter
,您都必须自己缓存它们。使用SimpleOnPageChangeListener
来捕获页面更改事件,然后为下一页做一些初始化。
答案 1 :(得分:1)
从destroyItem()
中的容器中移除视图后,请将其保存在ArrayList
中。在instantiateItem()
期间,首先检查您的arraylist中是否有未使用的视图,如果是,请使用该视图。如果没有,请膨胀一个。
垃圾收集器可能已收集或未收集视图,因此您需要先进行预检查才能使用它。