Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> 淺談Android中的 Fragment、生命周期回調方法 以及使用

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

編輯:關於Android編程

Fragment 是個什麼東西?

可以把Fragment理解成Activity中的模塊,這個模塊有自己的布局,有自己的生命周期,單獨處理自己的輸入,在Activity運行的時候可以加載或者移除Fragment模塊。還可以覆蓋前面的一個頁面,加載想要的模塊

Fragment介紹:

Android是在Android 3.0 (API level 11)開始引入Fragment的,要麼用全部用app,要麼全部用v4(3.0以下需要導入的包),不然可是會報錯的!

 

那麼如果開發的app需要在3.0以下的版本運行呢?比如還有一點點市場份額的2.3!

於是乎,v4包就這樣應運而生了,而最低可以兼容到1.6版本!至於使用哪個包看你的需求了,不過現在幾乎都是

4.0以上的,所以這個時候,你可以直接使用app包下的Fragment,然後調用相關的方法通常都是不會有什麼問題的


 

使用v4包要注意的事項:

 

①如果你使用了v4包下的Fragment,那麼所在的那個Activity就要繼承FragmentActivity哦!

案例:今天在xml文件中靜態地載入fragment,然後重寫了Fragment,但是在加載Activity的時候就報錯了,

大概的提示就是Fragment錯誤還是找不到什麼的,name屬性改了幾次還是錯!最後才發現是用了

v4的包的緣故,只需讓自己的Activity改成FragmentActivity即可!

Fragment 生命周期? Activity生命周期:

\ \   兩個生命周期對比: \   只有真正的掌握 生命周期 才能更好的運用frgment . 1.onAttach()
作用:fragment已經關聯到activity,這個時候 activity已經傳進來了, 獲得activity的傳遞的值 就可以進行 與activity的通信裡, 當然也可以使用getActivity(),前提是這個fragment已經和宿主的activity關聯,並且沒有脫離,有且只有調用一次。
2.onCreate() 系統創建fragment的時候回調他,在他裡面實例化一些變量
這些個變量主要是:當你 暫停 停止的時候 你想保持的數據
他只調用一次。

3.onCreateView()

第一次使用的時候 fragment會在這上面畫一個layout出來, 為了可以畫控件 要返回一個 布局的view,也可以返回null j 就什麼都沒有顯示。

當系統用到fragment的時候 fragment就要返回他的view,越快越好 ,所以盡量在這裡不要做耗時操作,比如從數據庫加載大量數據

 

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介紹完了。

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved