Android Fragment多層嵌套重影問題的解決方法
1解決bug的思想:
//step1:當(dāng)bug被發(fā)現(xiàn)(排除極低偶然性,單次性,開發(fā)工具導(dǎo)致)
//step2:根據(jù)經(jīng)驗(yàn)判斷bug的重現(xiàn)場景,多次測試,直到精準(zhǔn)的定位bug
//step3:根據(jù)重現(xiàn)場景找到對應(yīng)的代碼
//step4:分析區(qū)域代碼是否會影響到其他功能.
//step5:做好數(shù)據(jù)的備份工作.(做好代碼重構(gòu)和恢復(fù)的準(zhǔn)備,這樣你才能肆無忌憚的搗鼓代碼)
//step6:修復(fù)代碼的過程中,你會發(fā)現(xiàn)可能有多種解決方案.試著采取不影響主線的解決方案.以免影響到其他的代碼.
//step7:回顧所有的審查和測試等工作。思考bug的出現(xiàn)原因,避免下次再犯同類型的錯(cuò)誤.
2導(dǎo)致原因
//step1:開發(fā)中,我們需要經(jīng)常需要多個(gè)Fragment間切換,并且保存每個(gè)Fragment的狀態(tài).
//step2:官方的方法是使用replace()來替換Fragment,但是replace()的調(diào)用會導(dǎo)致Fragment的onCreteView()被調(diào)用,所以切換界面時(shí)會無法保存當(dāng)前的狀態(tài).
//step3:因此一般采用add()、hide()與show()配合,來達(dá)到保存Fragment的狀態(tài).
3原理解析
//step1:正是因?yàn)槭褂昧薋ragment的狀態(tài)保存,當(dāng)系統(tǒng)內(nèi)存不足,F(xiàn)ragment的宿主Activity回收的時(shí)候,F(xiàn)ragment的實(shí)例并沒有隨之被回收。
//step2:Activity被系統(tǒng)回收時(shí),會主動(dòng)調(diào)用onSaveInstance()方法來保存視圖層(View Hierarchy),然后通過onRestoreInstanceState()方法來恢復(fù)視圖層.(activity中兩個(gè)方法的核心代碼如下)
//step3:所以當(dāng)Activity通過導(dǎo)航再次被重建時(shí),之前被實(shí)例化過的Fragment依然會出現(xiàn)在Activity中
protected void onRestoreInstanceState(Bundle savedInstanceState) {
if (mWindow != null) {
//取出視圖層
Bundle windowState = savedInstanceState.getBundle(WINDOW_HIERARCHY_TAG);
if (windowState != null) {
mWindow.restoreHierarchyState(windowState);
}
}
}
protected void onSaveInstanceState(Bundle outState) {
//保存視圖層
outState.putBundle(WINDOW_HIERARCHY_TAG, mWindow.saveHierarchyState());
Parcelable p = mFragments.saveAllState();
if (p != null) {
outState.putParcelable(FRAGMENTS_TAG, p);
}
getApplication().dispatchActivitySaveInstanceState(this, outState);
}
4解決方法(了解清楚后解決方法就容易了)
//solution1:
第一.簡單的做法,就是給每層fragment加上背景色,重疊后也就看不見了
//solution2:
第二.進(jìn)行判空操作.
如果為空,創(chuàng)建對象,add上去;
如果不為空,直接show出來;
(注意不要使用remove方法移除,hide即可)
以上所述是小編給大家介紹的Android Fragment多層嵌套重影問題的解決方法,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時(shí)回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
相關(guān)文章
Flutter實(shí)現(xiàn)底部導(dǎo)航欄創(chuàng)建詳解
ConvexBottomBar是一個(gè)底部導(dǎo)航欄組件,用于展現(xiàn)凸起的TAB效果,支持多種內(nèi)置樣式與動(dòng)畫交互。本文將利用ConvexBottomBar創(chuàng)建漂亮的底部導(dǎo)航欄,感興趣的可以學(xué)習(xí)一下2022-01-01
Android中實(shí)現(xiàn)Webview頂部帶進(jìn)度條的方法
這篇文章主要介紹了Android中實(shí)現(xiàn)Webview頂部帶進(jìn)度條的方法,當(dāng)前很流行的一個(gè)效果,就是打開網(wǎng)頁時(shí)會在頂部顯示一個(gè)打開進(jìn)度條,需要的朋友可以參考下2015-01-01
Kotlin?掛起函數(shù)CPS轉(zhuǎn)換原理解析
這篇文章主要為大家介紹了Kotlin?掛起函數(shù)CPS轉(zhuǎn)換原理解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-12-12
Android編程實(shí)現(xiàn)號碼歸屬地查詢的方法
這篇文章主要介紹了Android編程實(shí)現(xiàn)號碼歸屬地查詢的方法,涉及Android xml文件的發(fā)送及WebService的操作技巧,需要的朋友可以參考下2016-01-01
Android開發(fā)實(shí)現(xiàn)圓形圖片功能示例
這篇文章主要介紹了Android開發(fā)實(shí)現(xiàn)圓形圖片功能,涉及Android實(shí)現(xiàn)圓形圖片的界面布局與CirImageView組件相關(guān)使用操作技巧,需要的朋友可以參考下2019-04-04
Android實(shí)現(xiàn)倒計(jì)時(shí)30分鐘功能
這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)倒計(jì)時(shí)30分鐘功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-05-05

