fragment,中文有分段、碎片的意思,可透過activity中,加入、切換多個不同的fragment,效果就類似於play商店畫面切換的部分,為你推薦的按鈕按下去顯示的是A fragment的內容,而熱門排行榜的按鈕點下去顯示的是B fragment的內容,中間那塊就是類似於fragment的部分,而fragment也跟activity一樣有它自己的生命週期,在每次狀態改變時,就執行不同的狀態流程,接著就先提提有關"生命週期"。
首先先看到Fragment的生命週期圖
取自:Android Developers
其中比較常見的是onCreate及onCreateView,那麼就先講onCreate。
首先onAttach在Fragment與Activity關聯時已調用,而onCreate主要用於保存過去任何的狀態,他會去接收一個bundle的savedInstancestate值,在開始進入這個活動周期時,會使用的方法來還原狀態,而這個值在初次創建時為空值。
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
onCreateView這個方法主要是可以透過使用LayoutInflater內的inflate方法,將你所設定的布局包裝成一個view(視圖)並使用,跟setContentView類似,而在fragment中因為是繼承自fragment,而不是繼承AppCompactActivity,所以沒有setContentView方法。
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// ---Inflate the layout for this fragment---
return inflater.inflate(R.layout.fragment, container, false);
}
而onViewCreated則是在onCreateView之後觸發的事件。
在建立完View之後,此狀態代表Fragment、Activity已創建好,並且視圖View的可見狀態會保留、可使用Activity的資源。
@Override
public void onViewStateRestored(Bundle savedInstanceState){
super.onViewStateRestored(savedInstanceState);
}
Fragment完成創立後(Created),在原activity中使用FragmentManager+FragmentTransaction的方法來使其可見,若創立的view非空,就會把生命週期已到Started。
@Override
public void onStart() {
super.onStart();
}
當Fragment可見、效果皆已完成並且正在使用時,生命週期將移至Resumed調用onResume()方法,指示用戶可以與Fragment進行交互的適當信號,像是View等,調用onResume()方法則完成交互。
@Override
public void onResume() {
super.onResume();
}
當用戶離開Fragment但Fragment可見時,會將Fragment與View的生命週期移至Paused,並調用onPause()方法。
@Override
public void onPause() {
super.onPause();
}
當Fragment已停止,會向觀察者發出onStop事件,狀態轉換可能由父Activity或Fragment停止觸發,會在保存狀態前調用的事件。
@Override
public void onStop() {
super.onStop();
}
當Fragment即將被結束、保存,就會執行onDestroyView這個方法,getViewLifecycleOwnerLiveData()將返回空值,他會刪除onCreateView產生視圖的所有引用。
@Override
public void onDestroyView() {
super.onDestroyView();
}
Fragment與Activity不再綁定,資源將被釋放。
@Override
public void onDestroy() {
super.onDestroy();
}
接著就可以透過加入Logcat來將不同的狀態執行觀察,另外如果有需要了解Activity活動的生命週期,可以點選這篇文章,且可以做結合觀察。
更多:Android Developers