ViewPager可以同时显示5个视图还是Android中的其他选项?

时间:2014-01-16 01:35:52

标签: android android-viewpager

我目前正在使用页面宽度为0.2的ViewPager同时显示5个视图。这在逻辑上需要从7开始的屏幕外限制,以便在视图之间平滑过渡。

一开始我使用了FragmentStatePagerAdapter,但我担心内存消耗和性能。这就是我现在只使用PagerAdapter来显示我的观点的原因。

我想要的(以及我拥有的):

<< - 查看|查看视图视图视图|查看 - >>

Android中还有其他方法来处理这个问题吗?我想过将LinearLayout与ScrollView一起使用,但我需要在滑动后“粘住”视图。而且我非常喜欢视图的自定义页面指示器。

此外:我应该在我的对象中保存(元素的)视图,还是应该在每次调用后重新创建它们(是的,我在destroyItem中删除它们)?

另一个问题:从FragmentStatePageAdapter切换到PagerAdapter是否正确?

2 个答案:

答案 0 :(得分:1)

来自文件http://developer.android.com/reference/android/support/v4/app/FragmentStatePagerAdapter.html

  

使用Fragment管理每个页面的PagerAdapter的实现。该类还处理片段状态的保存和恢复。

     

当存在大量页面时,此版本的寻呼机更有用,更像列表视图。当页面对用户不可见时,它们的整个片段可能会被破坏,只保留该片段的保存状态。与FragmentPagerAdapter相比,这允许寻呼机保持与每个被访问页面相关联的更少内存,代价是在页面之间切换时可能产生更多开销。

因此,如果您有很多页面,使用FragementStatePageAdapter会更好。 FragementStatePageAdapter在内存管理方面更有效。

但是如果您想在屏幕外部缓存2页,无论FragmentStatePageAdapterPageAdapter,您都必须自己缓存它们。使用SimpleOnPageChangeListener来捕获页面更改事件,然后为下一页做一些初始化。

答案 1 :(得分:1)

destroyItem()中的容器中移除视图后,请将其保存在ArrayList中。在instantiateItem()期间,首先检查您的arraylist中是否有未使用的视图,如果是,请使用该视图。如果没有,请膨胀一个。

垃圾收集器可能已收集或未收集视图,因此您需要先进行预检查才能使用它。