fragment簡單有用的一些細節
android開發非常熟悉的一個用來展示介面的碎片,在我們操作fragment的過程當中,需要注意許許多多的細節,下面就來分享下我遇到的一些細節上的東西。
1.fragment是依附於activity的,但是有自己的生命週期,其中它和activity一樣都有生命週期的onresume()方法,我們要注意當我們想執行fragment的onresume的方法時,必定會先執行activity中的onresume方法,還會同樣執行所有依附於這個activity的fragment中的onresume方法。
2.fragment中我們經常會呼叫資原始檔中的一些資源,一般都是沒有問題的,但是有些時候當你切換fragment太快的時候會發現程式奔潰了,這是為什麼呢?一看你發現自己呼叫資原始檔的時候是放線上程中比如說是需要網路請求耗時操作返回的方法裡,此時你的fragment已經從activity中remove掉了,再使用getresource()方法得到的是空,然後調資原始檔出現空指標錯誤。解決方案有兩種一種是直接在呼叫前判斷if(added()),是否已經新增到activity中,另一種是將獲取資原始檔的操作放到非延時操作裡後將值先存到一個變數裡。
3.說下我在android studio中遇到的坑吧,當時我想除錯下程式碼,然後在onhiddenchanged()方法中打了個斷點,在切換fragment的時候,發現斷點老是進不來,我以為是onhiddenchange()方法沒有執行,但是我用的是常用的add,hide,show方法進行切換,每次切換都會執行onhiddenchanged()方法,原來是as自帶的坑,那個斷點邊成了一個叉,表示執行過了,但是沒有debug成功,你要rebuild專案或者說重啟下as就能debug成功了。。。當時查出時已淚崩。。
4.這是我們經常用到的fragment切換方法,然後很多時候我們需要在hide,或者show這個fragment的時候執行一些操作,這時候你就可以在fragment的父類裡面(經常都有個父類比如說basefragment來放一些fragment共有的操作),寫一個抽象方法,比如說在transaction.hide(hideFragment);前寫mCurrentFragment.beforeHide();當然父類裡面要有beforeHide()這個方法,這樣在有需要的時候子類fragment只要繼承就好了。
//不為空的話隱藏
if (hideFragment !=null) {
transaction.hide(hideFragment);
}
//已經新增的話顯示
if (startFragment.isAdded()) {
transaction.show(startFragment);
//第一次新增,並儲存tagKey(Fragment類名),可以用getSupportFragmentManager()直接根據tagKey名取出該Fragment進行操作
} else {
transaction.add(R.id.container, startFragment, tagKey);
}
transaction.commitAllowingStateLoss();
這是我感覺fragment中一些比較有用的tips,今天晚上突然想寫寫這好久沒寫的部落格,希望對大家有所幫助。。
相關文章
- for 迴圈的一些細節
- Termux使用的一些細節UX
- ViewPager巢狀fragment簡單使用Viewpager巢狀Fragment
- [MATLAB] plot畫圖簡單細節隨記Matlab
- 初學Golang的一些細節Golang
- 5-AVI–Fragment簡單封裝Fragment封裝
- 簡單分析Go語言中陣列的這些細節Go陣列
- Git 的一些使用細枝末節Git
- 一些 html+css 細節HTMLCSS
- Will it finally: 關於 try/catch 的一些細節
- 初學C++的一些小細節(1)C++
- 一些有用的Python庫Python
- 一些有用的網站網站
- 一些有用的連結
- 記錄一些React的一些細節,會不斷更新React
- 最簡單易懂的laravel事件,這個功能非常的有用Laravel事件
- 英文簡歷中關於專案經驗的一些有用的例子
- NSArray 簡單細說
- 2019年簡短的中秋節祝福語,簡單的中秋節祝福語
- 一些簡單的JavaScript加密/解密JavaScript加密解密
- Android--單Activity+多Fragment,玩轉FragmentAndroidFragment
- 徹底說透簡單工廠那些你沒有關注過的細節
- github的詳細使用,非常簡單!Github
- 執行緒池中你不容錯過的一些細節執行緒
- 落幕再談,「WAIC 2024」的一些細節與預判AI
- 是否有用於建立簡單CRUD應用的開源工具? - ycombinator開源工具
- fragment返回鍵關閉fragment以及最後一個fragment的時候關閉activity的簡便方法Fragment
- [20190523]修改引數後一些細節注意.txt
- ES6的一些有用的小特性
- sql簡單入門的一些操作SQL
- Linux下一些操作的簡單整理Linux
- SHELL中常用的一些簡單命令
- Java怎麼學?一些非常有用的書單和網站推薦Java網站
- 在 Spark 資料匯入中的一些實踐細節Spark
- 有用的 Bash 快捷鍵清單
- c++語法拾遺,一些細節與特性C++
- 一些常見的簡單最佳化
- 一些簡單的快捷鍵與DOS命令
- 資料庫簡單的一些原理概念資料庫