兩層Fragment嵌套,外層Fragment切換時內層Fragment不顯示內容

尊重他人勞動成果,轉載請說明出處:http://blog.csdn.net/bingospunky/article/details/46847269ide

需求

在搭界面有這麼樣一個需求:需要兩層的Fragment嵌套,內層需要滑動切換效果,外層界面不需要滑動效果。

那麼內層使用ViewPager切換,外層就使用replace切換。這樣搭出來的界面不能獲得需要的效果,內層的Fragment僅僅有第一次能顯示內容。以後切換外層Fragment時。內層Fragent都是空着的。
我再嘗試兩層Fragment都使用replace切換,這樣就能達到效果了。但是項目裏需要內層需要滑動切換的效果。對於這種狀況可以略微改動一下需求,取消內層滑動效果的需求就ok了。但是做爲一個求甚解的人,我仍是想嘗試一下實現內層滑動效果。那麼怎麼實現呢?
函數

show and hide

在切換外層Fragment時使用的是replace。被切換掉的Fragment的生命週期函數會運行到onDestroy。

我推測內層的Fragment空着是因爲被切換掉到Fragment在運行onDestroy函數時,對FragmentManager作了一些不可告人的事情致使的。那麼咱們可以選擇不運行onDestroy的方式切換。那麼就選擇show/hide進行切換外層Fragment。這個方式是可行的但是會產生一個新的問題。spa


當進程被殺死之後

比方一個activity已經add了4個Fragment,咱們在切換的時候使用show/hide切換。假設這個時候按home鍵返回桌面。在以後的一段時間裏,因爲內存的緣由。這個應用的進程被系統殺死了,而後咱們經過長按home鍵回到這個應用。那麼系統會建立一個新的activity給咱們。在系統建立的新的activity裏。不能很是好的還原剛纔已經add的4個Fragment。在界面裏仍是會有4個Fragment(假設Fragment沒有背景色,那麼這4個Fragment會重疊在一塊兒),並且切換事件也不響應。那麼咱們怎麼解決問題呢?首先咱們要對這個問題進行定性,當咱們給activity加入多個Fragment且該應用被系統殺死後又一次建立時,多個Fragment會出現異常。

當咱們出現這樣的狀況時,可以finish掉這個activity。因爲這樣的狀況很是少出現。因此問可以finish這個activity。
.net

最後

這篇文章僅僅是介紹了我遇到的兩層Fragment嵌套的問題,以及我解決這個問題的表面現象。剛纔我也嘗試了一下去讀Fragment的源代碼,但是尚未進展。在接下來的時間我會閱讀這部分的源代碼,而後從源代碼到角度找到上面兩個問題(1.兩層Fragment切換時。爲何內層Fragment不顯示?2.activity被系統殺死。又一次生成時,爲何Fragmant會重疊且不響應切換?)的緣由,就像我前面的從源代碼角度解決這個問題同樣。

最後的最後

轉眼,已經凌晨四點半了,凌晨四點半的五道口很是安靜。很是美。
相關文章
相關標籤/搜索