整理自《第一行代碼》——第四章
碎片
碎片是一種可以嵌入在活動當中的UI片段,能讓程序更加合理和充分地利用大屏幕的空間,在平板上利用廣泛。
//動態加載myFragment的佈局文件
public myFragment extends Fragment{
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){
View view = inflater.inflate(R.layout.myFragment,container,false);
return view;
}
}
<fragment
android:id="@+id/myFragment"
android:name="com.example.fragmenttest.myFragment"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1" />
動態添加碎片
- 創建待添加的碎片實例
- 獲取
FragmentManager
,在活動中可以直接通過調用getSurpportFragmentManager()
方法得到 - 開啓一個事務,通過調用
beginTransaction()
方法開啓 - 向容器內添加或替換碎片,一般用
replace()
實現,需要傳入容器的id和待添加的碎片實例 - 提交事物,調用
commit()
方法來完成
replaceFragment(new MyFragment());//添加或替換碎片
private void replaceFragment(Fragment fragment){
FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction transaction = fragmentManager.beginTransaction();
transaction.replace(R.id.my_layout,fragment);
transaction.commit();
}
transaction.addToBackStack(null);//將事務添加到返回棧中
碎片和活動間通信
MyFragment myFragment = getFragmentManager().findFragmentById(R.id.myFragment)
//活動中調用碎片
MainActivity activity = getActivity();
//在碎片中調用活動
碎片的生命週期
運行狀態 當碎片可見,且關聯的活動正處於運行狀態時,該碎片也處於運行狀態。
暫停狀態 當活動進入暫停狀態時(由於另一個未佔滿屏幕的活動被添加到了棧頂),與它相關聯的可見碎片就會進入到暫停狀態
停止狀態 活動進入停止狀態,關聯碎片就進入停止狀態
銷燬狀態 活動被銷燬,則關聯碎片進入銷燬狀態,或者通過調用FragmentTransaction
的remove()
、replace()
方法將碎片從活動中移除。如果在事務提交前沒有調用addToBackStack()
方法,則也會進入銷燬狀態
方法名 | 含義 |
---|---|
onAttach() |
碎片和活動建立關聯時調用 |
onCreateView() |
爲碎片創建視圖(加載佈局)時調用 |
onActivityCreated() |
確保與碎片相關聯的活動一定已經創建完畢時調用 |
onDestroyView() |
當與碎片關聯的視圖被移除的時候調用 |
onDetach() |
當碎片和活動解除關聯的時候調用 |
限定符
在res目錄下新建layout-large
文件夾,新建佈局。在佈局文件中寫兩個fragment
,即雙頁模式。其中,large就是一個限定符,屏幕被認爲是large的設備就會自動加載layout-large
文件夾下的佈局,小屏幕設備仍然加載layout
文件夾下的佈局。
最小寬度限定符:如layout-sw600dp
,則表示當屏幕寬度大於600dp則加載該文件夾下的佈局。