了解了与ViewPager
配合使用的PagerAdapter
、FragmentPagerAdapter
和FragmentStatePagerAdapter
后,那么应该使用哪个Adapter?
当ViewPager
展示的单页面业务逻辑偏少,主要用于展示信息,则只需要使用PagerAdapter
来展示即可。
例如图片列表的大图显示,单页面都只需要一个ImageView
,而对单项进行操作的业务逻辑都是一致的,只需要放置在Activity
中进行处理即可。
如果ViewPager
展示的单页面业务逻辑偏多,这时候使用Fragment
来分离业务逻辑,则可以使结构清晰,代码简洁,并且提高代码重用性。
而FragmentPagerAdapter
与FragmentStatePagerAdapter
的差别,主要在于后者内部对于Fragment
进行状态保存和重用,并且及时回收UI,减少了内存的消耗。
当ViewPager
展示的页面数量较少或者页面数据量偏少时,可以使用FragmentPagerAdapter
,并且结合ViewPager
的setOffscreenPageLimit方法,来避免重新创建Fragment
的问题。
而Fragment
数量偏多,或者Fragment
包含较多的数据展示时,使用FragmentStatePagerAdapter
则更为合适。使用FragmentStatePagerAdapter
时,需要注意的是,当Fragment
超出ViewPager
预加载的范围而被移除时,需要在onSaveInstanceState方法中保存好数据,并且在onCreateView、onViewCreated或onViewStateRestored方法中进行恢复,避免过多的数据读取操作。