FragmenPagerAdapter和FragmenStatePagerAdapter

这两者的区别主要在于卸载不再需要的fragment时采取的方法不同。

使用FragmentStatePagerAdapter会销毁掉不需要的fragment。事务提交后,可以将fragment从activity的FragmentManager中彻底移除。该类名中的state表明在销毁fragment时,它会将onSaveInstanceState(Bundle)方法中的Bundle信息保存下来。用户切换回来时,保存的实例可用于回复生成新的fragment。

FragmentPagerAdapter对于不再需要的fragment,FragmentManager选择调用事务的detach(fragment)方法,而非remove(fragment)方法,FragmentPagerAdapter只是销毁fragment的视图,但是仍将实例保留在FragmentManager中。FragmentPagerAdapter创建的fragment不会被销毁。

由上可知:

  1. FragmentStatePagerAdapter更省内存,所以当有大量的fragment时,推荐使用FragmentStatePagerAdapter.
  2. 但是当用户界面只有少量fragment时,推荐FragmentPagerAdapter。