1. 程式人生 > >淺談Android中的 Fragment、生命週期回撥方法 以及使用

淺談Android中的 Fragment、生命週期回撥方法 以及使用

        4onActivityCreated()

             當Activity中的onCreate方法執行完後呼叫。

注意了:
從這句官方的話可以看出:當執行onActivityCreated()的時候 activity的onCreate才剛完成。
所以在onActivityCreated()呼叫之前 activity的onCreate可能還沒有完成,
所以不能再onCreateView()中進行 與activity有互動的UI操作,UI互動操作可以在onActivityCreated()裡面進行。
所以呢,這個方法主要是初始化那些你需要你的父Activity或者Fragment的UI已經被完


整初始化才能初始化的元素

       5.onStart()

       和activity一致,啟動Fragement 啟動時回撥,,此時Fragement可見。
       6.onResume()

        和activity一致 在activity中執行是可見的。啟用, Fragement 進入前臺, 可獲取焦點時啟用。

       7.onPause()

        和activity一致 其他的activity獲得焦點,這個仍然可見第一次呼叫的時候,指的是 使用者 離開這個fragment(並不是被銷燬)
通常用於 使用者的提交(可能使用者離開後不會回來了)
        8.onStop()

       和activity一致, fragment不可見的, 可能情況:activity被stopped了或者 fragment被移除但被,加入到回退棧中,一個stopped的fragment仍然是活著的如果長時間不用也會被移除。

       9.   onDestroyView() 

      Fragment中的佈局被移除時呼叫。表示fragemnt銷燬相關聯的UI佈局, 清除所有跟檢視相關的資源。

然後這個知識移除檢視  並沒有銷燬而且還沒有脫離activity

       10.onDestroy()

       銷燬fragment物件, 跟activity類似了。
      11.onDetach()

       Fragment和Activity解除關聯的時候呼叫。 脫離activity。

          接下來 來模擬一個fragment 的啟動 按下home鍵 銷燬等 系統是怎麼樣呼叫生命週期,這裡用Logcat日誌來檢視

(XX_Fragment 為Fragment的生命週期  否則為Activity週期)

      

      

        

      

      當現實fragment的時候都先執行activity方法,當銷燬的時候都是現執行 fragment的方法,這樣更好理解fragment是巢狀在activity中

          總結生命週期的回撥方法:

 
         1.當一個fragment被建立的時候,它會經歷以下狀態.。
                  onAttach()
                  onCreate()
                  onCreateView()
                  onActivityCreated()
         2.當這個fragment對使用者可見的時候,它會經歷以下狀態。
                  onStart()
                  onResume()
         3.當這個fragment進入“後臺模式”的時候,它會經歷以下狀態。
                  onPause()
                  onStop()
         4.當這個fragment被銷燬了(或者持有它的activity被銷燬了),它會經歷以下狀態。
                  onPause()
                  onStop()
                  onDestroyView()
                  onDetach()
          5.就像activitie一樣,在以下的狀態中,可以使用Bundle物件儲存一個fragment的物件。
                  onCreate()
                  onCreateView()
                  onActivityCreated()
         6.fragments的大部分狀態都和activitie很相似,但fragment有一些新的狀態。
                  onAttached() —— 當fragment和activity關聯之後,呼叫這個方法。
                  onCreateView() —— 建立fragment中的檢視的時候,呼叫這個方法。
                  onActivityCreated() —— 當activity的onCreate()方法被返回之後,呼叫這個方法。
                  onDestroyView() —— 當fragment中的檢視被移除的時候,呼叫這個方法。
                  onDetach() —— 當fragment和activity分離的時候,呼叫這個方法。

   解析完了生命週期 以及生命週期的回撥方法,接下來看下如何應用。

   

      假設這次有個 側滑選單 就是類似QQ 的側滑選單   側滑選單上的每個item 點選之後都有自己的fragment 但是在使用過程中,如果使用不當,很容易造成 不斷的重新載入view 損耗記憶體空間。

        這幾天在網上查找了一些frgment 的優化資料,也發現了很多都是問題,自己擼一套自己使用。

  介紹具體的幾個常用的方法:

FragmentManager fragmentManager = getFragmentManager()

FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();

       管理Fragment的一些新增 隱藏 替換等操作 需要的。

   (注:如果import android.support.v4.app.FragmentManager;那麼使用的是:FragmentManager fragmentManager = getSupportFragmentManager())

       add()方法加上Fragment的物件

fragmentTransaction.add(R.id.fragment_container, fragment);

fragmentTransaction.commit();
       一次類推。   replace()   show()  hide()  等方法都是類似使用。

         這裡最後看一貼程式碼,最後的使用

public void switchConent(Fragment from, Fragment to, String title)
    {
	 
	FragmentTransaction transactio = getSupportFragmentManager().beginTransaction();
	// 如果沒有加入過
	if (!to.isAdded())
	{
	    if (from != null)
	    {
		// 如果不為空 則隱藏
		transactio.hide(from);
		transactio.addToBackStack(null);
	    }
	    // 新增
	    transactio.add(R.id.content_frame, to);
	    transactio.commit();
	} else
	{
	    if (from != null)
	    {
		transactio.hide(from);
	    }
	    /**這裡可以寫一些使用者操作資料的 呼叫方法*/
	    // 隱藏當前的fragment,顯示下一
	    transactio.show(to).commit();
        }
}

                    from 從哪個fragment 換到 目標fragment to;

                   isadded() 判斷事都 新增過 如果沒有 那可以新增。

                   邏輯也很簡單,隱藏 顯示 提交 互動使用。

                    比較關鍵的一點 就是如何更新fragment上的UI資料。 這裡可以在對應的fragment 裡寫一些UI操作的方法 然後在 上面那段程式碼 show(Object).commit()   中呼叫。

                      管理 側滑選單上的所有  Fragment:

                      可以用 單例模式和工廠模式 來管理 全部的fragment 防止多次被建立。引用當前顯示的fragment作為等下 換頁的時候

      傳入引數的from。

                    簡單的fragment介紹完了。