FragmentStatePagerAdapter和FragmentPagerAdapter用法基本一致,唯一的區(qū)別在于卸載不再需要的Fragment時(shí),各自采用的處理方法不同。
FragmentStatePagerAdapter會(huì)銷毀不再需要的Fragment。事務(wù)提交后,activity的FragmentManager中的fragment會(huì)被徹底移除。FragmentStatePagerAdapter類中的“state”表明:在銷毀Fragment時(shí),可在onSaveInstanceState(Bundle)方法中保存Fragment的Bundle信息。用戶切換回來時(shí),保存的實(shí)力狀態(tài)可用來生成新的Fragment。
相比之下,F(xiàn)ragmentPagerAdapter對(duì)于不再需要的Fragment,會(huì)調(diào)用事務(wù)的detach(Fragment)
方法來處理,而不是remove(Fragment)
方法。換句話說就是FragmentPagerAdapter只是銷毀了Fragment的視圖,當(dāng)這個(gè)Fragment實(shí)例還保留在FragmentManager中。因此,F(xiàn)ragmentPagerAdapter創(chuàng)建的Fragment永遠(yuǎn)不會(huì)被銷毀。
說道具體的用途,使用FragmentStatePagerAdapter更加節(jié)省內(nèi)存,所以適合顯示大量的數(shù)據(jù)。而FragmentPagerAdapter則更加適合顯示少量固定的Fragment,比如一般App常用的Tab頁。通常只有固定數(shù)量的tab頁3~5頁,所以也不用擔(dān)心內(nèi)存不足的問題。