(學習參考書:第一行代碼第2版)
一、碎片及其使用方式
碎片(fragment)是一種可以嵌入在活動中的UI片段,它能讓程式更加合理和充分利用大螢屏的空間,碎片類似于活動,同樣能包含布局,有自己的生命周期,
(1)碎片的簡單用法
- 新建layout布局檔案
- 新建系結對應布局檔案的類,該類繼承Fragment,在該類中重寫
onCreateView方法, - 在要添加該碎片的活動中添加fragment控制元件,使用屬性
android:name顯式指明要添加的碎片類名,要將包名也加上
(2)動態添加碎片
碎片的真正強大之處在于它可以在程式運行時動態的添加到活動中,步驟如下:
- 創建待添加的碎片實體
- 獲取FragmentManager,在活動中可以直接通過呼叫
getSupportFragmentManager()方法得到, - 開啟一個事務,通過呼叫
beginTransaction()方法開啟 - 向容器中添加或替換碎片,一般使用replace方法實作,需要傳入容器的id和待添加的碎片實體
- 提交事務,呼叫
commit()方法來完成
(3)在碎片中模擬回傳堆疊
如果在動態添加/更改碎片后想通過Back鍵回傳上一個碎片,即實作類似回傳堆疊的效果,可以這樣實作:
FragmentTransaction中提供了一個addToBackStack()方法,它可以用于將一個事務添加到回傳堆疊中,
transaction.addToBackStack(null);
在事務提交前呼叫該方法,它可以接受一個名字用于描述回傳堆疊的狀態,一般傳入null即可,
(4)碎片和活動間的通信
雖然碎片都是嵌入在活動中顯式,但是碎片和活動都是各自存在于一個獨立的類當中的,它們之間沒有明顯的方式直接進行通信,
為了方便碎片和活動之間進行通信,FragmentManager提供了一個類似于findViewById()的方法,專門用于從布局檔案中獲取碎片的實體,代碼如下:
MyFragment myFragment = (MyFragment) getSupportFragmentManager().findFragmentById(R.id.my_fragment);
(MyFragment是自定義的碎片類,my_fragment是碎片的布局檔案,)
呼叫FragmentManager的findFragmentById()方法就可以在活動中獲得相應實體,然后輕松呼叫碎片里的方法,
同樣的,在每個碎片中通過呼叫getActivity()方法來得到和當前碎片相關的活動實體,
MainActivity activity = (MainActivity) getActivity();
當碎片需要使用Context物件時,也是使用該方法,
碎片與碎片間通信的方法就是通過中間活動實作,
二、碎片的生命周期
運行狀態:當一個碎片可見并且它所關聯的活動處于運行狀態,該碎片也處于運行狀態,
暫停狀態:當一個活動進入暫停狀態,與它相關聯的可見碎片也會進入到暫停狀態
停止狀態:當一個活動進入停止狀態,與其相關聯的碎片會進入到停止狀態,或者FragmentTransaction的remove(),replace()方法將碎片從活動中移除,但如果在事務提交之前使用addToBackStack()方法,這時的碎片也會進入停止狀態,進入停止狀態的碎片對用戶完全不可見,有可能被系統回收,
銷毀狀態:當一個活動進入銷毀狀態,與其相關聯的碎片會進入到銷毀狀態,或者FragmentTransaction的remove(),replace()方法將碎片從活動中移除,但在事務提交之前并沒有使用addToBackStack()方法,這時的碎片也會進入銷毀狀態,
Fragment類中提供了一系列的回呼方法,以覆寫碎片生命周期的每個環節,活動中的回呼方法碎片都有除此之外,碎片還有一部分附加的回呼方法:
onAttach() 當碎片和活動建立聯系時呼叫
onCreateView() 為碎片加載布局時呼叫
onActivityCreated() 確保與碎片相關聯的活動一定已經創建完畢時呼叫
onDestoryView() 當與碎片關聯的視圖被移除的時候呼叫
onDetach() 當碎片和活動解除關系時呼叫
三、動態加載布局的技巧
為了滿足在不同尺寸和解析度設備上加載布局的不同,需要使用限定符來決定設備加載的布局檔案,Android常見的限定符:

使用方法:在res目錄下新建布局檔案夾layout-Qualifier,這里的Qualifier對應上述的限定符,再在該檔案夾下創建同名布局檔案,
最小寬度限定符:在res目錄下新建布局檔案夾layout-swXXXdp,當程式運行到螢屏寬度大于XXX的設備時,會默認加載該檔案夾下的布局檔案,程式運行到螢屏寬度小于XXX的設備時,會默認加載普通的布局檔案,
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/274092.html
標籤:其他
上一篇:android9系統android studio專案改成用android.mk編譯參考v7包第三方jar包,aar檔案和so庫檔案
