Android中FragmentPagerAdapter與FragmentStatePagerAdapter使用和區別

FragmentPagerAdapter 和 FragmentStatePagerAdapter區別:
在使用方式上兩者沒有區別,區別主要體現在緩存上

FragmentPagerAdapter :

  • 1、getItem只調用一次,調用一次將返回位置的Fragment緩存到mFragmentManager,下次切換調用instantiateItem直接從mFragmentManager的緩存拿,在mCurTransaction.attach(fragment);觸發Fragment週期方法
  • 2、Fragment切換的時候,銷燬緩存, 僅銷燬Fragent的視圖onDestroyView
  • 3、Fragment切換的時候,重新加載顯示Fragment,僅創建視圖onCreateView

    FragmentPagerAdapter會把Fragment進行緩存,切換的時候雖然ViewPager會有緩存的創建和銷燬但僅僅是創建和銷燬Fragment的視圖不會對Fragment對象有影響

    FragmentStatePagerAdapter:

    • 不會對Fragment進行緩存,每次切換的時候ViewPager銷燬緩存和創建的時候都是直接銷燬Fragment–>onDestroy, 創建的時候直接重新創建Fragment—>onCreate
    • 使用的時候:由於FragmentPagerAdapter會對Fragment對象進行緩存,如果項目有很多個Fragment這個時候,超過6個,會內存浪費, 就選着FragmentPagerAdapter
    • 當Fragment嵌套使用的時候,內層的Fragment切換使用的mFragmentManager必須是getChildFragmentManager內層的Fragment的生命週期纔會起作用
      Fragment fragment = mFragmentManager.findFragmentByTag(name);
      mCurTransaction.attach(fragment);
發佈了79 篇原創文章 · 獲贊 62 · 訪問量 8萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章