ViewPager+Fragment切換 和Fragment.replace的區(qū)別?

首先介紹一下ViewPager_Fragment的切換.現(xiàn)有四個Fragment,分別是Fragment_1,Fragment_2,Fragment_3

Fragment_1 經(jīng)歷 1_onAttach() 和 2_onCreate() 后,

?Fragment_2也開始走了 1_onAttach()和 2_Create()方法;OncreateView();onActivityCreate()onstart();onresume();然后滑動ViewPager,當滑到Fragment_2后,

Fragment_3經(jīng)歷了從 1__onCreate()方法到6__onResume()方法。Fragment_1卻是沒有走任何生命周期方法。

Fragment_4先走了 1_onAttach(),2_onCreate()后,F(xiàn)ragment_1走 7_onPause,8_onStop,9_onDestroyView()。Fragment_1的生命周期終于開始走。而此時,F(xiàn)rment_4也已經(jīng)完成了預加載.

當ViewPager中的Fragment大于等于3個的時候,除去展示開頭和結尾兩個Fragment的情況,ViewPager會保留一個Fragment左右兩側以及自身3個Fragment的信息。相鄰的3個Fragment之間來回切換,都沒有走10_onDestroy()和11_onDetach()。Fragment的10_onDestroy和11_onDetach()什么時候會ViewPager中,F(xiàn)ragment的10_onDestroy()以及11_onDetach()會在ViewPager所在的Activity結束后被調(diào)用。

Fragment.replace:這種模式每次replace會把生命周期全部執(zhí)行一遍,如果在這些生命周期函數(shù) 里拉取數(shù)據(jù)的話,就會不斷重復的加載刷新數(shù)據(jù)。

這里順便說一下

Fragment的使用就我所知就我會的只有兩種吧,一種是add方式來進行show和hide,這種方式你切換fragment不會讓fragment重新刷新,而用replace方式會使fragment重新刷新,因為add方式是將fragment隱藏了而不是銷毀再創(chuàng)建,replace方式每次都是重新創(chuàng)建。

1、什么是FragmentTransaction?

使用Fragment時,可以通過用戶交互來執(zhí)行一些動作,比如增加、移除、替換等。所有這些改變構成一個集合,這個集合被叫做一個transaction??梢哉{(diào)用FragmentTransaction中的方法來處理這個transaction,并且可以將transaction存進由activity管理的back stack中,這樣用戶就可以進行fragment變化的回退操作??梢赃@樣得到FragmentTransaction類的實例:

FragmentTransaction的commit和commitAllowingStateLoss的區(qū)別

用add(), remove(), replace()方法,把所有需要的變化加進去,然后調(diào)用commit()方法,將這些變化應用。在commit()方法之前,你可以調(diào)用addToBackStack(),把這個transaction加入back stack中去,這個back stack是由activity管理的,當用戶按返回鍵時,就會回到上一個fragment的狀態(tài)。你只能在activity存儲它的狀態(tài)(當用戶要離開activity時)之前調(diào)用commit(),如果在存儲狀態(tài)之后調(diào)用commit(),將會拋出一個異常。這是因為當activity再次被恢復時commit之后的狀態(tài)將丟失。如果丟失也沒關系,那么使用commitAllowingStateLoss()方法。

?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

  • Fragment概述 Fragment是Activity中用戶界面的一個行為或者說是一部分。主要是支持大屏幕上動態(tài)...
    wangling90閱讀 11,742評論 5 75
  • Fragment的應用真的是越來越廣泛了,之前Android在3.0版本加入Fragment的時候,主要是為了解決...
    閑庭閱讀 3,234評論 0 10
  • 《Android Fragment完全解析,關于碎片你所需知道的一切》 我們都知道,Android上的界面展示都是...
    cxm11閱讀 2,347評論 2 19
  • "紙上得來終覺淺,絕知此事要躬行。"在訓戰(zhàn)結合之前,聽了許多人關于職場的感悟,看了許多關于職場方面的書,受到了許多...
    田曉宇2017閱讀 814評論 0 0
  • 無論你看過多少書,做過多少事,如果你沒有做記錄,那么這些書跟你沒看過是一樣的,這些事下次你做時還會像第一次去做...
    阿龍仔閱讀 756評論 0 0

友情鏈接更多精彩內(nèi)容