Android Fragment多層嵌套重影問(wèn)題的解決方法
1解決bug的思想:
//step1:當(dāng)bug被發(fā)現(xiàn)(排除極低偶然性,單次性,開(kāi)發(fā)工具導(dǎo)致)
//step2:根據(jù)經(jīng)驗(yàn)判斷bug的重現(xiàn)場(chǎng)景,多次測(cè)試,直到精準(zhǔn)的定位bug
//step3:根據(jù)重現(xiàn)場(chǎng)景找到對(duì)應(yīng)的代碼
//step4:分析區(qū)域代碼是否會(huì)影響到其他功能.
//step5:做好數(shù)據(jù)的備份工作.(做好代碼重構(gòu)和恢復(fù)的準(zhǔn)備,這樣你才能肆無(wú)忌憚的搗鼓代碼)
//step6:修復(fù)代碼的過(guò)程中,你會(huì)發(fā)現(xiàn)可能有多種解決方案.試著采取不影響主線的解決方案.以免影響到其他的代碼.
//step7:回顧所有的審查和測(cè)試等工作。思考bug的出現(xiàn)原因,避免下次再犯同類型的錯(cuò)誤.
2導(dǎo)致原因
//step1:開(kāi)發(fā)中,我們需要經(jīng)常需要多個(gè)Fragment間切換,并且保存每個(gè)Fragment的狀態(tài).
//step2:官方的方法是使用replace()來(lái)替換Fragment,但是replace()的調(diào)用會(huì)導(dǎo)致Fragment的onCreteView()被調(diào)用,所以切換界面時(shí)會(huì)無(wú)法保存當(dāng)前的狀態(tài).
//step3:因此一般采用add()、hide()與show()配合,來(lái)達(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í)例并沒(méi)有隨之被回收。
//step2:Activity被系統(tǒng)回收時(shí),會(huì)主動(dòng)調(diào)用onSaveInstance()方法來(lái)保存視圖層(View Hierarchy),然后通過(guò)onRestoreInstanceState()方法來(lái)恢復(fù)視圖層.(activity中兩個(gè)方法的核心代碼如下) //step3:所以當(dāng)Activity通過(guò)導(dǎo)航再次被重建時(shí),之前被實(shí)例化過(guò)的Fragment依然會(huì)出現(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:
第一.簡(jiǎn)單的做法,就是給每層fragment加上背景色,重疊后也就看不見(jiàn)了
//solution2:
第二.進(jìn)行判空操作.
如果為空,創(chuàng)建對(duì)象,add上去;
如果不為空,直接show出來(lái);
(注意不要使用remove方法移除,hide即可)
以上所述是小編給大家介紹的Android Fragment多層嵌套重影問(wèn)題的解決方法,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
相關(guān)文章
Android使用AlertDialog實(shí)現(xiàn)對(duì)話框
本文主要介紹了Android使用AlertDialog實(shí)現(xiàn)對(duì)話框的相關(guān)知識(shí),具有很好的參考價(jià)值。下面跟著小編一起來(lái)看下吧2017-03-03Android實(shí)現(xiàn)excel/pdf/word/odt/圖片相互轉(zhuǎn)換
這篇文章主要為大家詳細(xì)介紹了Android如何實(shí)現(xiàn)excel/pdf/word/odt/圖片之間的相互轉(zhuǎn)換,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下2023-04-04Android Studio實(shí)現(xiàn)幀動(dòng)畫
這篇文章主要為大家詳細(xì)介紹了Android Studio實(shí)現(xiàn)幀動(dòng)畫,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-11-11Android?Studio實(shí)現(xiàn)音樂(lè)播放器的全過(guò)程(簡(jiǎn)單易上手)
這篇文章主要給大家介紹了關(guān)于Android?Studio實(shí)現(xiàn)音樂(lè)播放器的相關(guān)資料,文中通過(guò)實(shí)例代碼以及圖文介紹的非常詳細(xì),對(duì)各位Android開(kāi)發(fā)者們具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2022-02-02Android RecycleView滑動(dòng)停止后自動(dòng)吸附效果的實(shí)現(xiàn)代碼(滑動(dòng)定位)
這篇文章主要介紹了Android RecycleView滑動(dòng)停止后自動(dòng)吸附效果的實(shí)現(xiàn)代碼(滑動(dòng)定位),本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-10-10Android 調(diào)用系統(tǒng)聯(lián)系人界面(添加聯(lián)系人,添加已有聯(lián)系人,編輯和修改)
這篇文章主要介紹了Android 調(diào)用系統(tǒng)聯(lián)系人界面(添加聯(lián)系人,添加已有聯(lián)系人,編輯和修改),非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2017-03-03Android SharedPreference存儲(chǔ)文件三步走
SharedPreferences是安卓平臺(tái)上一個(gè)輕量級(jí)的存儲(chǔ)類,用來(lái)保存應(yīng)用的一些常用配置,比如Activity狀態(tài),Activity暫停時(shí),將此activity的狀態(tài)保存到SharedPereferences中;當(dāng)Activity重載,系統(tǒng)回調(diào)方法onSaveInstanceState時(shí),再?gòu)腟haredPreferences中將值取出2023-01-01Android開(kāi)發(fā)手機(jī)無(wú)線調(diào)試的方法
今天小編就為大家分享一篇關(guān)于Android開(kāi)發(fā)手機(jī)無(wú)線調(diào)試的方法,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2018-12-12