Android Fragment遇到重叠问题的解决方案
原因如下:
容器的activity被系統GC,導致activity的所有生命周期重新被調用,兩個fragment便會重疊出錯。
原因是當activity被意外回收時會調用onSaveInstanceState()保持自身的一些狀態和信息,以備在onCreate()方法中能夠直接獲取而不需要重新創建。?
fragment的實例也會在onSaveInstanceState()中進行保存,所以在onCreate()方法中等于創建了兩個Fragment的實例,當我控制一個fragment隱藏時,假設這個fragment的名字叫aFragment,由于現在activity實際上有兩個aFragment,而我只隱藏了一個所以會導致fragment重疊。
解決方案如下:
控制activity的onCreate()方法讓其只創建一次Fragment。?@Override protected void onCreate(@Nullable Bundle savedInstanceState) {
// 在頁面重啟時,Fragment會被保存恢復,而此時再加載Fragment會重復加載,導致重疊 ;
if(saveInstanceState == null){ // 或者 if(findFragmentByTag(mFragmentTag) == null)
// 正常情況下去 加載根Fragment } }
判斷savedInstanceState是否為空可以知道這是第一次創建還是GC之后再次調用的onCreate(),
只在第一次onCreate()時創建aFragmen的實例,就可以避免重疊的問題。?
還有一個辦法就是重寫activity的onSaveInstanceState()方法,
去掉其中保存fragment的代碼,缺點是當頁面比較復雜時,
saveInstance除了保存fragment的狀態還保存了所有view的狀態,
必須將view的狀態保存寫一遍,所以推薦使用第一種方法。
總結
以上是生活随笔為你收集整理的Android Fragment遇到重叠问题的解决方案的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: PR2019打开报错:由于找不到MSVC
- 下一篇: android sina oauth2.