1. 程式人生 > >安卓Fragment使用詳解

安卓Fragment使用詳解

 Fragment
一、Fragment的概念和用法:    (一)、概念:        Fragment是在Android 3.0 (API level 11)開始引入新的API技術。        為了提高程式碼重用性和改善使用者體驗,我們將Activity中的UI元件進行分組和模組化管理。這些分組後的UI元件就是Fragment。        一個Activity頁面中可以包含多個Fragment模組,而同一個Fragment模組也可以被多個Activity使用。每個Fragment有自己的佈局,有自己的生命週期。雖然Fragment擁有自己的生命週期,但因為Fragment必須被嵌入到Activity中使用,因此Fragment的生命週期是受其Activity宿主的生命週期所控制的。當Activity暫停時,該Activtiy內的所有Fragment都會暫停;當Activity被銷燬時,該Activity內的所有Fragment都會被銷燬。
   (二)、Fragment為什麼能改善使用者體驗,另外Fragment能用於平板電腦,那麼普通的手機螢幕適用嗎?       下圖是一個“AndroidManual學習手冊瀏覽介面”的效果圖:        如上圖所示,“平板電腦”中,在一個Activity佈局中放了兩個Fragment:左側是文章標題列表Fragment,右側是文章內容展示的Fragment。左側的標題列表不變,點選每條列表項,右側的文章內容發生變化。點選和瀏覽內容都在同一個頁面中發生,避免了頁面切換和點選“返回鍵”返回的操作。使用者感覺自然方便和快捷。        那麼Fragment元件適用於普通螢幕的手機嗎?答案是肯定的。Fragment本身是可複用的元件。是否在一個Activity頁面中放置多個Fragment取決了螢幕的大小,如果螢幕大小不夠,那麼就可以在Activity A中只包含Fragment A,在Activity B中只包含Fragment B,點選A中的item跳轉到B就可以。
  (三)、Fragment要點:【重點
    1、Fragment作為Activity介面的一部分組成出現;    2、可以在一個Activity中同時出現多個Fragment,並且一個Fragment亦可在多個Activity中使用;    3、在Activity執行過程中,可以新增移除或者替換Fragment(add()、remove()、replace());    4、Fragment可以響應自己的輸入事件,並且有自己的生命週期,當然,它們的生命週期直接受其所屬的宿主Activity的生命週期控制。
二、Fragment生命週期:

(一)、Fragment基本狀態:

    1、活動狀態:
Resumed   當前Fragment位於前臺,使用者可見,可以獲得焦點;
    2、暫停狀態:  Paused   另一個Activity處於前臺並擁有焦點, 但是該Fragment所在的Activity仍然可見(前臺Activity區域性透明或者沒有覆蓋整個螢幕),不過不能獲得焦點;    3、停止狀態:Stopped
  • 要麼是宿主Activity已經被停止, 要麼是Fragment從Activity被移除但被新增到回退棧中;
  • 停止狀態的Fragment仍然活著(所有狀態和成員資訊被系統保持著)。 然而, 它對使用者不再可見, 並且如果Activity被銷燬,它也會被銷燬;
    4、銷燬狀態:Destroyed  只能等待被回收。

(二)、Fragment生命週期:【重點】

1、onAttach(): 當該Fragment被新增到Activity時被回撥。該方法只會被呼叫一次;
2、onCreate():  當建立Fragment時被回撥。該方法只會被呼叫一次;3、onCreateView():每次建立、繪製該Fragment的View元件時回撥該方法,Fragment將會顯示該方法返回的View 元件; 4、onActivityCreated(): 當Fragment的宿主Activity被啟動完成後回撥該方法;//單獨的5、onStart(): 啟動Fragment時被回撥;6、onResume():  onStart()方法後一定會回撥onResume()方法;7、onPause(): 暫停Fragment時被回撥;8、onStop(): 停止Fragment時被回撥;9、onDestroyView():  銷燬該Fragment所包含的View元件時呼叫;10、onDestroy():  銷燬Fragment時被回撥。該方法只會被呼叫一次;11、onDetach():  將Fragment從Activity中刪除、替換完成時呼叫該方法。onDestroy()方法後一定會回撥onDetach()方法。該方法只會被呼叫一次。12、onInflate():  13、onViewCreated(): 

(三)、示例程式碼:

1、Fragment的佈局檔案:
<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">
<TextView
android:id="@+id/text_leftfragment_info"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
android:text="這是leftFragment中的textview"/>
</LinearLayout>
2、MainActivity的佈局檔案:
<RelativeLayoutxmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
<fragment
android:id="@+id/fragment_left_newstitle"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
android:name="com.steven.android24_fragmentlifecycle.LeftFragment"/>
</RelativeLayout>
3、Fragment檔案中的java程式碼:
publicclass LeftFragment extends Fragment {
privatestaticfinal String TAG = "LeftFragment";
 @Override
publicvoid onInflate(Activity activity, AttributeSet attrs, Bundle savedInstanceState) {
          Log.i (TAG, "==onInflate()執行了");
super.onInflate(activity, attrs, savedInstanceState);
  }
 @Override
publicvoid onAttach(Activity activity) {
          Log.i (TAG, "==onAttach()執行了");
super.onAttach(activity);
  }
 @Override
publicvoid onCreate(Bundle savedInstanceState) {
          Log.i (TAG, "==onCreate()執行了");
super.onCreate(savedInstanceState);
  }
 @Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {
              Log.i (TAG, "==onCreateView()執行了");
          // inflater.inflate(resource, null);
return inflater.inflate(R.layout.fragment_left, container, false);
  }
 @Override
publicvoid onViewCreated(View view, Bundle savedInstanceState) {
              Log.i (TAG, "==onViewCreated()執行了");
super.onViewCreated(view, savedInstanceState);
  }
 @Override
publicvoid onActivityCreated(Bundle savedInstanceState) {
          Log.i (TAG, "==onActivityCreated()執行了");
super.onActivityCreated(savedInstanceState);
  }
 @Override
publicvoid onStart() {
          Log.i (TAG, "==onStart()執行了");
super.onStart();
  }
 @Override
publicvoid onResume() {
          Log.i (TAG, "==onResume()執行了");
super.onResume();
  }

相關推薦

SystemProperties及使用--

platform :msm8916 OS:android5.1 安卓系統屬性是以鍵值對的形式存在,系統屬性,一般放在system.prop,build.prop,default.prop等檔案中, 應用通過函式String key = S

behavior3--自定義behavior

一.前言 官方定義: A Behavior implements one or more interactions that a user can take on a child view. These interactions may include dr

ContentProvider

如有轉載,請申明: ContentProvider是安卓四大元件之一,但與其他三種元件相比,並不是很常用,但同樣重要。 ContentProvider可以讓應用之間相互共享資源,比通過公開的檔案的共享方式更加安全和高效。 一般來說,我們很少需要自己去編寫一個Co

Fragment使用

Fragment一、Fragment的概念和用法:    (一)、概念:        Fragment是在Android 3.0 (API level 11)開始引入新的API技術。       

二、Fragment

Fragment為什麼稱為第五大元件 有自己的生命週期 可以靈活的新增到activity中 使用頻率比較高 依附於activtiy 1.fagment載入到activity的兩種方式 新增frament到activity的佈局檔案中 動態在activity中新增fra

Android fragment+viewpager 仿qq介面 實現點選選單切換介面+滑動切換viewpager切換介面

原始碼地址 http://download.csdn.net/detail/zhangjm_123/7902245 最近寫了一個fragment+viewpager仿qq的app,先上圖                   如圖,介面底部有四個textview,分別

Android Fragment 2016 乾貨

最近看了很多動畫和一些效果很好的自定義控制元件,發現了一件事,就是Android的View層設計思想和古老的JavaSwing是如此的相似。這是在原來的基礎上加入了一些輸入移動端的生命週期,使其在使用和效能上更好。但是對核心的理解還是可以借鑑一些的。 如果說A

Fragment之六——如何監聽fragment中的回退事件與怎樣儲存fragment狀態

前言:計劃總是趕不上變化,無論結局怎樣,只要一直跟隨自己的內心,不放棄,總有一天,你會成為那個人,加油。相關文章:經過前幾篇,大家應該對Fragment認識的已經足夠多了,有關Fragment的基礎知識在前幾篇基本就講完了,這篇給大家講兩個可能會用到的知識點。這兩點理解起來可

weex開發實戰(5)--利用wxc-tabbar實現類似fragment分頁效果

wxc-tabbar是官方提供的一個tabbar擴充套件,需要安裝weex-components npm install weex-components --save 注意在安卓專案上,src最好寫成 “file://assets/yourpath”<templat

Android Fragment

Fragment產生原因: 同時適配手機和平板、UI和邏輯的共享。 介紹: Fragment也會被加入回退棧中。Fragment擁有自己的生命週期和接受、處理使用者的事件。可以動態的新增、替換和移除某個Fragment。必須依存於Activity生命週期 Fragmen

關於Fragment onCreateView()重複執行

private View rootView;//快取Fragment view@Overridepublic View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstan

Android Fragment(五):Fragment與Activity通訊

與activity通訊儘管fragment的實現是獨立於activity的,可以被用於多個activity,但是每個activity所包含的是同一個fragment的不同的例項。Fragment可以呼叫getActivity()方法很容易的得到它所在的activity的物件,

Android進階——Fragment之操作原理(三)

引言 前一篇文章總結了Fragment 的基本概念和基本的用法,相信大家也能夠掌握一些知識了,但是對於一些操作可能還是不知其所以然,說實話曾經很長一段時間為也是暈乎乎的,後來才慢慢重視去學習瞭解,才略知一二,遂分享之。 一、管理Fragement所涉及到

Fragment之三——管理Fragment(1)

前言:follow your heart,be your own king相關文章:前面給大家稍微看了要怎麼使用fragment,在上篇中,我們也初步接觸到了add,replace這些fragment操作的函式,下面就再詳細講講如何管理Fragment頁面吧。一、概述 1、F

Android入門——Fragment之基本概念與用法(一)

引言 Android在3.0中引入了Fragments的概念,其目的是用在大螢幕裝置上–例如平板電腦上,支援更加動態和靈活的UI設計。平板電腦的螢幕要比手機的大得多,有更多的空間來放更多的UI元件,並且這些元件之間會產生更多的互動。Fragment允許這樣的一

WebSocket客戶端實現(三)–服務端主動通知

this override 連接 繼續 true www. 格式 代碼 ati   WebSocket安卓客戶端實現詳解(三)–服務端主動通知    本篇依舊是接著上一篇繼續擴展,還沒看過之前博客的小夥伴,這裏附上前幾篇地址    WebSocket安卓客戶端實現詳解(一)

WebSocket客戶端實現(一)–連接建立與重連

ask 應該 header oid mha 主動推送 未收到 compile tde http://blog.csdn.net/zly921112/article/details/72973054 前言 這裏特別說明下因為WebSocket服務端是公司線上項目所以這裏ur

編程資源文件string中對占位符的使用

cnblogs ava 留言 舉例 image 獲取字符串 取字符 _for 技術   這裏將為你詳細介紹占位符的使用,將其學以致用,可以達到簡化布局文件,減少字符串資源量。   1、在資源文件中的使用。     打開資源文件中的strings.xml文件,進行編輯。如下圖

Android Relative Layout 相對布局

沒有 horizon 水平 gravity 邊界線 w3c 水平居中 ntb ole 思維導圖可在幕布找到 1. 基礎 如果在相對布局裏,控件沒有指明相對位置,則默認都是在相對布局的左上角: <TextView android:layout_width=

專案實戰之強大的網路請求框架okGo使用(六):擴充套件專案okServer,更強大的下載上傳功能,支援斷點和多工管理

OkGo與OkDownload的區別就是,OkGo只是簡單的做一個下載功能,不具備斷點下載,暫停等操作,但是這在很多時候已經能滿足需要了。 而有些app需要有一個下載列表的功能,就像迅雷下載一樣,每個下載任務可以暫停,可以繼續,可以重新下載,可以有下載優先順序,這時候OkDownload就有