首先介紹一下ViewPager_Fragment的切換.現有四個Fragment,分別是Fragment_1,Fragment_2,Fragment_3
Fragment_1 經歷 1_onAttach() 和 2_onCreate() 后,
?Fragment_2也開始走了 1_onAttach()和 2_Create()方法;OncreateView();onActivityCreate()onstart();onresume();然后滑動ViewPager,當滑到Fragment_2后,
Fragment_3經歷了從 1__onCreate()方法到6__onResume()方法。Fragment_1卻是沒有走任何生命周期方法。
Fragment_4先走了 1_onAttach(),2_onCreate()后,Fragment_1走 7_onPause,8_onStop,9_onDestroyView()。Fragment_1的生命周期終于開始走。而此時,Frment_4也已經完成了預加載.
當ViewPager中的Fragment大于等于3個的時候,除去展示開頭和結尾兩個Fragment的情況,ViewPager會保留一個Fragment左右兩側以及自身3個Fragment的信息。相鄰的3個Fragment之間來回切換,都沒有走10_onDestroy()和11_onDetach()。Fragment的10_onDestroy和11_onDetach()什么時候會ViewPager中,Fragment的10_onDestroy()以及11_onDetach()會在ViewPager所在的Activity結束后被調用。
Fragment.replace:這種模式每次replace會把生命周期全部執行一遍,如果在這些生命周期函數 里拉取數據的話,就會不斷重復的加載刷新數據。
這里順便說一下
Fragment的使用就我所知就我會的只有兩種吧,一種是add方式來進行show和hide,這種方式你切換fragment不會讓fragment重新刷新,而用replace方式會使fragment重新刷新,因為add方式是將fragment隱藏了而不是銷毀再創建,replace方式每次都是重新創建。
1、什么是FragmentTransaction?
使用Fragment時,可以通過用戶交互來執行一些動作,比如增加、移除、替換等。所有這些改變構成一個集合,這個集合被叫做一個transaction。可以調用FragmentTransaction中的方法來處理這個transaction,并且可以將transaction存進由activity管理的back stack中,這樣用戶就可以進行fragment變化的回退操作。可以這樣得到FragmentTransaction類的實例:
FragmentTransaction的commit和commitAllowingStateLoss的區別
用add(), remove(), replace()方法,把所有需要的變化加進去,然后調用commit()方法,將這些變化應用。在commit()方法之前,你可以調用addToBackStack(),把這個transaction加入back stack中去,這個back stack是由activity管理的,當用戶按返回鍵時,就會回到上一個fragment的狀態。你只能在activity存儲它的狀態(當用戶要離開activity時)之前調用commit(),如果在存儲狀態之后調用commit(),將會拋出一個異常。這是因為當activity再次被恢復時commit之后的狀態將丟失。如果丟失也沒關系,那么使用commitAllowingStateLoss()方法。