《第一行代碼》——碎片

整理自《第一行代碼》——第四章

碎片

碎片是一種可以嵌入在活動當中的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" />

動態添加碎片

  1. 創建待添加的碎片實例
  2. 獲取FragmentManager,在活動中可以直接通過調用 getSurpportFragmentManager() 方法得到
  3. 開啓一個事務,通過調用beginTransaction()方法開啓
  4. 向容器內添加或替換碎片,一般用replace()實現,需要傳入容器的id和待添加的碎片實例
  5. 提交事物,調用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();
//在碎片中調用活動

碎片的生命週期

運行狀態 當碎片可見,且關聯的活動正處於運行狀態時,該碎片也處於運行狀態。

暫停狀態 當活動進入暫停狀態時(由於另一個未佔滿屏幕的活動被添加到了棧頂),與它相關聯的可見碎片就會進入到暫停狀態

停止狀態 活動進入停止狀態,關聯碎片就進入停止狀態

銷燬狀態 活動被銷燬,則關聯碎片進入銷燬狀態,或者通過調用FragmentTransactionremove()replace()方法將碎片從活動中移除。如果在事務提交前沒有調用addToBackStack()方法,則也會進入銷燬狀態

方法名 含義
onAttach() 碎片和活動建立關聯時調用
onCreateView() 爲碎片創建視圖(加載佈局)時調用
onActivityCreated() 確保與碎片相關聯的活動一定已經創建完畢時調用
onDestroyView() 當與碎片關聯的視圖被移除的時候調用
onDetach() 當碎片和活動解除關聯的時候調用

在這裏插入圖片描述

限定符

在res目錄下新建layout-large文件夾,新建佈局。在佈局文件中寫兩個fragment,即雙頁模式。其中,large就是一個限定符,屏幕被認爲是large的設備就會自動加載layout-large文件夾下的佈局,小屏幕設備仍然加載layout文件夾下的佈局。

最小寬度限定符:如layout-sw600dp,則表示當屏幕寬度大於600dp則加載該文件夾下的佈局。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章