關於多個fragment複用同一個佔位View產生的問題及解決

     在大多數項目中都會用到點擊標籤欄切換頁面這種功能,它的實現方式也有多種,從最先的tabhost+view,tablayout+viewpager,textview+viewpager,RadiuButton + FrameLayout 以及後面出的BottomNavigationView等等,原理都是用一個佔位View承載fragment,經過點擊標籤或者滑動來切換不一樣的頁面。網絡

      關於替換的方式 ide

      佔位view的最多見的一種寫法  佈局

    這樣就至關於用這個View搭載了Frgament。直接這樣寫原本是沒問題的,可是若是類中有網絡請求這樣的耗時任務,快速頻繁的切換會致使崩潰,NoPointerException,ResouceNotFoundException。對象

      解決方法,給每個frgament都綁定一個View,不要共用一個View,經過view.setVisibility的方式控制顯示隱藏,而後就完美解決崩潰的問題。事務

      以後想一想若是有多個fragment來回切換, 而且頁面中有edittext 輸入框的話,.replace方法每次都會從新實例化fragment,致使前面咱們填的內容丟失。更加優雅的方式是使用Fragment提供的事務FragmentTransaction,而後用add的方法,而不是每次都用replace。it

在獲取FragmentTransaction對象後調用add方法。在add以前斷一下Fragment對象是否爲空,不爲空的話就用ft的hide方法把Fragment隱藏起來,然會出現佈局重疊的狀況。io

        public void hideFragment(FragmentTransaction ft){ 原理

if (oneFm!=null){fragment

ft.hide(oneFm); }}請求

 

而後自行對比一下切換後輸入框內容區別:

 replace方法

 

add 方法

能夠發現

相關文章
相關標籤/搜索