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