Viewpager+FragmentpagerAdapet+Fragments+Listview=应用程序运行缓慢

12
我在布局中有一个ViewPager,该ViewPager包含了10个片段。每个片段都有一个ListView,该ListView是异步填充的。我目前使用FragmentPagerAdapter作为ViewPager的适配器,并在每个片段的onCreateView中进行API调用以填充ListView。滑动非常缓慢,应用程序因内存问题而关闭。
如何实现像Google Play一样流畅、响应迅速的(viewpager+listview)? 平稳的滑动 + 良好的列表项缓存?

还有一件事情我想在这个问题中添加,我能否在Fragment中实现ViewPager,如果可以的话,怎么做? - rupesh
1个回答

13

有许多方法可以提高与ListView集成的 ViewPager 的性能。

首先,将 PagerAdapterFragmentPagerAdapter 更改为 FragmentStatePagerAdapter。它们之间的区别在于,你可以在 Pager 中加载10个页面。如果你浏览了所有页面,FragmentManager 会把这些页面放入onStop()中,从而保留空间。但是使用 FragmentStatePagerAdapter 会销毁这些页面,但会使用 onSaveInstanceState 方法保存它们的实例。因此,当你返回时,它不会花费太多时间来加载,并且你将节省内存。

通常情况下,FragmentPagerAdapter 用于加载3页或更少。

提高性能的第二种方法(但会更快地耗尽电池)是在你的 AndroidManifest.xml 应用标签下添加以下行:

android:hardwareAccelerated="true"
第三种方法是检测滑动手势。您可以通过实现onPageChangeListener,然后在实现的onPageScrollStateChanged方法中检查页面是否处于Idle状态,然后添加ListView。否则,停止使用ListView并滚动到下一页。这里有一个更好的解释该点。
希望这些提示中的一些能帮助您实现更好的性能。

1
嗨,如果我使用onPageChangeListener,那么每次我滑动到页面时,它都会调用API并填充数据。我该如何缓存结果?我的API调用将返回JSON。 - user2749265

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接