Android碎片Fragment详讲(1)
Fragment
Fragment創建的步驟
1、????????繼承fragment一定是V4包下的
2、????????有且只有一個無參的構造方法
3、????????如果Fragment需要顯示界面,需要重寫onCreateView方法
4、????????指定布局資源,或者創建布局,返回即可
靜態創建fragment時:
需要指定fragment的class屬性 以及給Fragment加上id或者tag屬性
?
在onCreateView內部,可以設置控件的內容,開啟線程,連接網絡.。
Fragment的作用
1、????????簡化重復的開發工作,將內容與工程整合,最終提供功能的重用性
2、????????體改內聚,減少耦合成都度
3、????????Fragment用于布局界面的切分和優化,減少布局的重復,提高開發的效率。
通常tab樣式的切換,,使用RadioGroup。
?
主流的底部tab切換頁面的設計方式:就是中間一個FrameLayout 底部RadioGroup 切換時,替換FrameLayout中的fragment
每一個Fragment可以通過兩種方式添加到activity中
1)????????使用fragment標簽直接添加到activity
2)????使用代碼來添加使用兩個類,Frgamentmanager SupportFragmentManager
3)????內部添加刪除替換隱藏顯示,需要manager.beginTransaction()
4)????事物每次操作之前必須重啟,不允許使用成員變量的方式。
Fragment的生命周期:
1、????????Fragment的聲明周期和activity的聲明周期相似
2、????????以為Fragment依賴于Activity顯示,那么當Activity發生生命周期變化的時候,Fragment同樣發生相同的變化,包括
1)????????onCrate
2)????????onStart
3)????????onResume
4)????????onPause
5)????????onStop
6)????????onDestroy
Fragment還有一些聲明周期
onAttach():執行該方法時,Fragment與Activity已經完成綁定,該方法有一個Activity類型的參數,代表綁定的Activity,這時候你可以執行諸如mActivity = activity的操作。
onCreate():初始化Fragment。可通過參數savedInstanceState獲取之前保存的值。
onCreateView():初始化Fragment的布局。加載布局和findViewById的操作通常在此函數內完成,但是不建議執行耗時的操作,比如讀取數據庫數據列表。
onActivityCreated():執行該方法時,與Fragment綁定的Activity的onCreate方法已經執行完成并返回,在該方法內可以進行與Activity交互的UI操作,所以在該方法之前Activity的onCreate方法并未執行完成,如果提前進行交互操作,會引發空指針異常。
onStart():執行該方法時,Fragment由不可見變為可見狀態。
onResume():執行該方法時,Fragment處于活動狀態,用戶可與之交互。
onPause():執行該方法時,Fragment處于暫停狀態,但依然可見,用戶不能與之交互。
onSaveInstanceState():保存當前Fragment的狀態。該方法會自動保存Fragment的狀態,比如EditText鍵入的文本,即使Fragment被回收又重新創建,一樣能恢復EditText之前鍵入的文本。
onStop():執行該方法時,Fragment完全不可見。
onDestroyView():銷毀與Fragment有關的視圖,但未與Activity解除綁定,依然可以通過onCreateView方法重新創建視圖。通常在ViewPager+Fragment的方式下會調用此方法。
onDestroy():銷毀Fragment。通常按Back鍵退出或者Fragment被回收時調用此方法。
onDetach():解除與Activity的綁定。在onDestroy方法之后調用。
生命周期:
當Activity啟動后,首先執行activity的onCreate方法,之后執行Fragment的onAttch方法,當進行replace方法是,執行onDetachon方法。
啟動APP的聲明周期變化:
當fragment進行切換的時候,生命周期的變化:
首先是兩一個Fragment先與Activity進行連接,執行onAttach方法,
之后Fragment執行onCraete方法,
之前的fragment進入到不可見狀態onPause,之后之前的Fragment onStop 銷毀界面,之后銷毀,之后與Activity失去聯系,
此時先的Fragment創建View視圖,執行onCrateView方法,之后onActivityCrate方法,start,進入活動狀態onResuume狀態。
點擊back鍵:
Fragment ?執行onPuase不可見onStop? ondestroyView?? ondestroy onDetach方法。
這個界面的時候,執行onPause? onstop
?
恢復之后:Fragment onStart ??Activity onstart? Activity onResume?? Fragment onResume
?
?
?
參考:借鑒于網絡
生命周期變化 : 切換到該Fragment
?
05-21 14:26:35.095:D/FragmentDemo(7649): onAttach
?05-21 14:26:35.095: D/FragmentDemo(7649):onCreate
?05-21 14:26:35.095: D/FragmentDemo(7649):onCreateView
?05-21 14:26:35.100: D/FragmentDemo(7649):onActivityCreated
?05-21 14:26:35.120: D/FragmentDemo(7649):onStart
?05-21 14:26:35.120: D/FragmentDemo(7649):onResume
?
屏幕滅掉:
?
05-21 14:27:35.185:D/FragmentDemo(7649): onPause
?05-21 14:27:35.205: D/FragmentDemo(7649):onSaveInstanceState
?05-21 14:27:35.205: D/FragmentDemo(7649):onStop
?
屏幕解鎖
?
05-21 14:33:13.240:D/FragmentDemo(7649): onStart
?05-21 14:33:13.275: D/FragmentDemo(7649):onResume
?
切換到其他Fragment:
?
05-21 14:33:33.655:D/FragmentDemo(7649): onPause
?05-21 14:33:33.655: D/FragmentDemo(7649):onStop
?05-21 14:33:33.660: D/FragmentDemo(7649):onDestroyView
?
切換回本身的Fragment:
?
05-21 14:33:55.820:D/FragmentDemo(7649): onCreateView
?05-21 14:33:55.825: D/FragmentDemo(7649):onActivityCreated
?05-21 14:33:55.825: D/FragmentDemo(7649):onStart
?05-21 14:33:55.825: D/FragmentDemo(7649):onResume
?
回到桌面
?
05-21 14:34:26.590:D/FragmentDemo(7649): onPause
?05-21 14:34:26.880: D/FragmentDemo(7649):onSaveInstanceState
?05-21 14:34:26.880: D/FragmentDemo(7649):onStop
?
?
?
回到應用
05-21 14:36:51.940:D/FragmentDemo(7649): onStart
?05-21 14:36:51.940: D/FragmentDemo(7649):onResume
?
退出應用
05-21 14:37:03.020:D/FragmentDemo(7649): onPause
?05-21 14:37:03.155: D/FragmentDemo(7649):onStop
?05-21 14:37:03.155: D/FragmentDemo(7649):onDestroyView
?05-21 14:37:03.165: D/FragmentDemo(7649):onDestroy
05-21 14:37:03.165:D/FragmentDemo(7649): onDetach
如果替換或者刪除一個fragment然后然用戶可以導航到上一個fragment,必須在調用commit()方法之前調用addToBackStack()方法添加到回退棧,如果你把這個fragment添加到了回退站棧,在提交之后這個fragment會是被Stop而不是destroy,如果用戶導航到這個fragment,這個fragment將會被Restart而不是重新創建,如果沒有吧它添加到回退棧,則在刪除或者替換的時候它被Destroyed。
與其他fragment之間的交互:
???? 兩個單獨的fragment之間是不應該進行通信的,應該使用他們所在的Activity作為溝通的紐帶
???? 為了實現兩個Fragment的交互,您可以在Fragment中定義一個接口,然后再這個接口中定義一個方法,在Fragment的onAttach()方法中調用這個接口中的方法。然后讓Activity實現這個方法來完成Activity和Fragment之間的通信。
?
?
?
總結
以上是生活随笔為你收集整理的Android碎片Fragment详讲(1)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: android之视频直播与播放Vitam
- 下一篇: cf最低要求配置2021?