Android學習筆記(3)

myxs發表於2017-03-24

Fragment

標籤: Android


Fragment用法

Fragment是一種可以嵌入在活動中的UI片段。碎片一般都是被引入活動中,比如平板介面使用2個Fragment利用整個平板螢幕,不至於浪費空間和不美觀。

Fragment簡單用法

定義2個佈局檔案left_fragment和right—_fragment,如下

<LinearLayout...
    ... />
    <Button
        android:id="@+id/button"
        ... />
</LinearLayout>

再新建LeftFragment類繼承Fragment,重寫onCreateView方法,載入left_fragment佈局檔案。RightFragment類類似

public class LeftFragment extends Fragment {

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.left_fragment, container, false);
        return view;
    }
}

最後在佈局中使用fragment標籤,新增Fragment如下

<LinearLayout
    ... />
    <fragment
        android:id="@+id/left_gragment"
        andorid:name="com.example.fragmenttest.LeftFragment"
        android:layout_weight="1"
        ... />
        <fragemnt
            android:id="@+id/right_fragment"
            android:name="...RightFragment"
            android:layout_weight="1"
            ... />

動態新增Fragment

新建Fragment佈局檔案,以及Fragment類 將right_fragment佈局標籤改為Fragment佈局,用來支援Fragment動態新增

<FrameLayout
    android:id="@+id/right_layout"
    ... />
</FrameLayout>
  1. 建立待新增Fragment例項
  2. 呼叫getSupportFragmentManager,獲取到FragmentManager
  3. 開啟事務,beginTransaction方法
  4. 向容器內新增或替換Fragment,replace方法接收2個引數,一個容器id如佈局檔案id right_layout,和Fragment例項
  5. 提交事務,commit

注意一點,呼叫addToBackStack方法可以模擬返回棧的功能,即點選Back鍵後會回到上一個Fragment而不是直接退出程式

Fragment和Activity之間的通訊

  1. 活動中可以獲取Fragment的例項進而呼叫方法

    XXXFragment fragment = (XXXFragment) getFragmentManager().findFragmentById(R.id.xxx_fragment);
    
  2. Fragment中獲取活動例項

    MainActivity activity = (MainActivity) getActivity();
    

Fragment生命週期

  1. onAttach Fragment和活動建立關聯時呼叫
  2. onCreateView 為fragment建立檢視(載入佈局)時呼叫
  3. onActivityCreated 關聯的活動建立完畢時呼叫
  4. onDestroyView 檢視被移除時呼叫
  5. onDetach Fragment和活動解除關聯時呼叫

技巧

使用限定符和最小寬度限定符可以根據裝置螢幕大小載入

對於最後的News專案的整體總結

考慮到平板和手機的相容性,當使用Fragment的時候,建立Fragment佈局檔案,在Fragment類中載入佈局檔案。在活動的佈局中新增fragment標籤並指定android:name="...Fragmemt"。

手機僅載入一個Fragment,而平板還載入了包含在幀佈局中的Fragment 手機用活動來顯示,新建活動並複用Fragment類,使用fragment標籤,在活動佈局檔案中會自動引入Fragment佈局檔案。在活動的onCreat方法中獲取Fragment例項,並呼叫Fragment的方法顯示資料。

新建Fragment用來顯示RecyclerView以及相應的子項佈局,通過判斷是否能獲取幀佈局的id,如果是平板雙頁,載入另一個Fragment,否則則利用Intent啟動另一個活動顯示內容。

相關文章