Android- Fragment 切換頁面時會造成頁面重疊

上一回我們有說到在針對頁面切換時,會使用replace來進行切換

但是如果使用太多卻會造成頁面重疊..

由於筆者今天在撰寫程式時,發現自己常用的Replace居然沒辦法將前一個頁面成功至換掉

導致新的頁面內容重疊在原來的顯示內容上

搞了半天發現問題仍然無法解決..

後來與實驗室的學長討論後才發現,原來Replace並不能隨便亂用

當頁面的層數大於等於4的時候,就會造成頁面重疊的情況發生。

後來看了一下官網的文件才發現到:

官方文件中解釋說:replace()這個方法只是在上一個Fragment不再需要時採用的簡便方法。
正確的切換方式是add(),切換時hide()add()另一個Fragment;再次切換時,只需hide()當前,show()另一個。
這樣就能做到多個Fragment切換不重新實體化。

範例程式碼:

 FragmentTransaction transaction = getActivity().getSupportFragmentManager().beginTransaction();
            transaction.addToBackStack(null);


            if (!Detail.newInstance().isAdded()) {	// 先判断是否被add過 如果沒有Add過 代表是第一次呼叫 則需要先add 其餘時候都直接使用show進行顯示
                // hide裡面放的是自己當前所在的Fragment頁面,後面一定要.this才能夠指向現在要隱藏的頁面,否則會直接幫你生成一個新的頁面
                transaction.hide(DataList.this).add(R.id.Content, detail).commitAllowingStateLoss(); // 隱藏當前頁面 並新增明細頁面
            } else {
                transaction.hide(DataList.this).show(detail).commitAllowingStateLoss(); //隱藏當前頁面 呼叫明細頁面
            }

另外補充一點:

即使頁面不透過isAdded()來判斷是否為第一次載入,直接使用也可以達到切換的效果,.show()只是App在執行時,生命週期會比Add時還要來得短暫。

以上文章敘述如有錯誤及觀念不正確,請不吝嗇指教:)

有任何家教、案子 或技術相關問題 請都歡迎聯繫我

http://www.zhenghui.idv.tw/