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,今天晚上突然想寫寫這好久沒寫的部落格,希望對大家有所幫助。。
相關文章
- UITextField使用的一些細節UI
- ViewPager巢狀fragment簡單使用Viewpager巢狀Fragment
- 簡單分析Go語言中陣列的這些細節Go陣列
- [MATLAB] plot畫圖簡單細節隨記Matlab
- Git 的一些使用細枝末節Git
- Google+的一些技術細節Go
- 5-AVI–Fragment簡單封裝Fragment封裝
- 一些 html+css 細節HTMLCSS
- 初學C++的一些小細節(1)C++
- JS 一些優化效能的小細節JS優化
- 『翻譯』一些JavaScript優化的細節JavaScript優化
- WAS 開發需要注意的一些細節
- 簡單對比MySQL和Oracle中的一個sql解析細節MySqlOracle
- 記錄一些React的一些細節,會不斷更新React
- Will it finally: 關於 try/catch 的一些細節
- spring屬性配置的一些細節(二)Spring
- Wp7 Applicationbar 的一些細節APP
- 對於Fragment的一些理解Fragment
- 簡單記錄幾個有用的sql查詢SQL
- 關於CSS一些細節問題CSS
- 一些有用的函式函式
- 一些有用的網站網站
- 谷歌地圖iOS版的一些設計細節谷歌地圖iOS
- 關於多執行緒的一些細節 (轉)執行緒
- 一些簡單的函式函式
- HP的一些簡單命令
- seliunx的一些簡單命令
- ITIL的一些簡單感受
- 最簡單易懂的laravel事件,這個功能非常的有用Laravel事件
- 一些有用的Python庫Python
- AS400一些有用的命令
- fragment一些經典用法Fragment
- 英文簡歷中關於專案經驗的一些有用的例子
- github的詳細使用,非常簡單!Github
- 執行緒池中你不容錯過的一些細節執行緒
- 談談程式碼效能優化中的一些小細節優化
- 一些簡單的JavaScript加密/解密JavaScript加密解密
- LevelDB的一些簡單總結