1. 程式人生 > >Android 往activity新增fragment的三種add()方法

Android 往activity新增fragment的三種add()方法

在寫

        FragmentManager manager = getSupportFragmentManager();
        FragmentTransaction transaction = manager.beginTransaction();
        transaction.add

這裡寫圖片描述
這幾行程式碼的時候,android studio會自動地給我們提示。

要想區分這三個方法的區別首先我們來明確一下,fragment中生命週期中的兩個函式:

onCreate()
系統會在建立片段時呼叫此方法。您應該在實現內初始化您想在片段暫停或停止後恢復時保留的必需片段元件。
onCreateView
() 系統會在片段首次繪製其使用者介面時呼叫此方法。 要想為您的片段繪製 UI,您從此方法中返回的 View 必須是片段佈局的根檢視。如果片段未提供 UI,您可以返回 null

接下來就是上程式碼驗證這三種方法:

fragment的佈局檔案:(給fragment添加了粉紅色的背景顏色)
這裡寫圖片描述

package com.example.geekp.fragmentlifecircle;


import android.app.Activity;
import android.os.Bundle;
import android.support.annotation.Nullable;
import
android.support.v4.app.Fragment; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; /** * A simple {@link Fragment} subclass. */ public class BlankFragment extends Fragment { public BlankFragment() { // Required empty public constructor } @Override
public void onAttach(Activity activity) { super.onAttach(activity); System.out.println("onAttach******************************"); } @Override public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); System.out.println("onCreate******************************"); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { System.out.println("onCreateView******************************"); // Inflate the layout for this fragment return inflater.inflate(R.layout.fragment_blank, container, false); } @Override public void onActivityCreated(@Nullable Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); System.out.println("onActivityCreated******************************"); } @Override public void onStart() { super.onStart(); System.out.println("onStart******************************"); } }

activity_main的佈局檔案:
這裡寫圖片描述
1.add(Fragment fragment, String tag)
在activity中呼叫這個方法

        FragmentManager manager = getSupportFragmentManager();
        FragmentTransaction transaction = manager.beginTransaction();
        //建立fragment但是不繪製UI
         transaction.add(new BlankFragment(),"");

執行結果:
這裡寫圖片描述
fragment的UI沒有被繪製
2. add(@IdRes int containerViewId, Fragment fragment)
這裡寫圖片描述
fragment的Ui被繪製
3.add(@IdRes int containerViewId, Fragment fragment, @Nullable String tag)
這裡寫圖片描述
UI得到繪製

從以上三種方法可以看到只有後兩者會繪製UI,而且都呼叫了

onCreate()
onCreateView()

方法,之後只有第一種沒有繪製UI
這裡寫圖片描述