国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Android > 正文

Android Fragment多層嵌套重影問題的解決方法

2019-12-12 05:32:45
字體:
來源:轉載
供稿:網友

1解決bug的思想:

//step1:當bug被發現(排除極低偶然性,單次性,開發工具導致)

//step2:根據經驗判斷bug的重現場景,多次測試,直到精準的定位bug

//step3:根據重現場景找到對應的代碼

//step4:分析區域代碼是否會影響到其他功能.

//step5:做好數據的備份工作.(做好代碼重構和恢復的準備,這樣你才能肆無忌憚的搗鼓代碼)

//step6:修復代碼的過程中,你會發現可能有多種解決方案.試著采取不影響主線的解決方案.以免影響到其他的代碼.

//step7:回顧所有的審查和測試等工作。思考bug的出現原因,避免下次再犯同類型的錯誤.

2導致原因

//step1:開發中,我們需要經常需要多個Fragment間切換,并且保存每個Fragment的狀態.

//step2:官方的方法是使用replace()來替換Fragment,但是replace()的調用會導致Fragment的onCreteView()被調用,所以切換界面時會無法保存當前的狀態.

//step3:因此一般采用add()、hide()與show()配合,來達到保存Fragment的狀態.

3原理解析

//step1:正是因為使用了Fragment的狀態保存,當系統內存不足,Fragment的宿主Activity回收的時候,Fragment的實例并沒有隨之被回收。

//step2:Activity被系統回收時,會主動調用onSaveInstance()方法來保存視圖層(View Hierarchy),然后通過onRestoreInstanceState()方法來恢復視圖層.(activity中兩個方法的核心代碼如下)//step3:所以當Activity通過導航再次被重建時,之前被實例化過的Fragment依然會出現在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:

第二.進行判空操作.

如果為空,創建對象,add上去;

如果不為空,直接show出來;

(注意不要使用remove方法移除,hide即可)

以上所述是小編給大家介紹的Android Fragment多層嵌套重影問題的解決方法,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對武林網網站的支持!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 丘北县| 桃园市| 台南县| 乐都县| 孝感市| 根河市| 北海市| 东兰县| 荣昌县| 甘泉县| 称多县| 日喀则市| 格尔木市| 库尔勒市| 桃江县| 高邑县| 宁南县| 屯留县| 德化县| 秭归县| 水城县| 宜城市| 福建省| 营口市| 寿阳县| 舟曲县| 兴海县| 乐平市| 应用必备| 错那县| 渭南市| 邵东县| 乌拉特前旗| 娄烦县| 新巴尔虎左旗| 天祝| 松溪县| 广灵县| 垦利县| 庄河市| 东莞市|