當前位置:首頁 » 安卓系統 » android的fragment的

android的fragment的

發布時間: 2024-06-21 18:25:49

① android 中fragment有什麼優點

1.Fragment是android3.0引入的新控制項,果應用使用在3.0以下、1.6及以上的版本,需要引入v4包。
2.Fragment支持在不同的Activity中使用並且可以處理自己的輸入事件以及生命周期方法等。
3.Fr期方法依賴於Activity的生命周期,例如一個Activity的onPause()的生命周期方法被調用的時候這個Activity中的所有的Fragment的onPause()方法也將被調用。
4.FragmentManager提供了對Activity運行時的Fragment的添加、刪除、替換的操作。在Activity運行期間可以添加Fragment而不是在XML布局文件中進行定義。如果打算在Activity中改變Fragment的生命過程。如果要執行添加、刪除、修改的操作,必須通過FragmentManager的對象獲得一個FragmentTransaction對象,通過它的API來執行這些操作。
5.兩個單獨的Fragment之間是不應該進行通信的。應該使用他們所存在的Activity作為溝通的紐帶。

② android fragment和activity的區別

Fragment是到Android3.0+ 以後,Android新增了Fragments,在沒有 Fragment 之前,一個屏幕只能放一個 Activity。這是一個起源時間大家要知道是什麼時候開始引入的。
.Activity 代表了一個屏幕的主體,而Fragment可以作為Activity的一個組成元素。
一個Activity可以有若干個(0或n)Fragment構成。你可以把Fragment想像成Activity中的一個控制項,只不過相對於一般控制項,Fragment與Activity聯系更為緊密,隨著Activity的生命周期變化,Fragment也隨之相應不同的生命周期函數。
Fragment 從功能上講相當於一個子活動(Activity),它可以讓多個活動放到同一個屏幕上,也就是對用戶界面和功能的重用,因為對於大屏設備來說,純粹的 Activity 有些力不從心。
Fragment 像是一個子活動,但是 Fragment 不是 Activity 的擴展,因為 Fragment 擴展自 android.app 中的 Object,而 Activity 是 Context 的子類。Fragment 有自己的視圖層級結構,有自己的活動周期,還可以像活動一樣響應後退按鈕,Fragment 還有一個用作其初始化參數的包(Bundle),類似 Activity,Fragment 也可由系統自動保存並在以後還原。當系統還原 Fragment 時,它調用默認的構造函數(沒有參數),然後將此Bundle還原到新創建的 Fragment 中,所以無論新建還是還原 Fragment,都要經過兩個步驟:(1)調用默認構造函數(2)傳入新的或者保存起來的Bundle。
一個Activity可以運行多個 Fragment,Fragment 切換時,由 FragmentTransaction 執行,切換時,上一個 Fragment 可以保存在後退棧中(Back Stack),這里的後退棧由 FragmentManager 來管理,注意 Fragment 和 Activity 的後退棧是有區別的:Activity 的後退棧由系統管理,而 Fragment 的後退棧由所在的Activity 管理。
Fragment不能脫離Activity而存在,只有Activity才能作為接收intent的載體。其實兩者基本上是載體和組成元素的關系。
Fragment用來描述一些行為或一部分用戶界面在一個Activity中,你可以合並多個fragment在一個單獨的activity中建立多個UI面板,同時重用fragment在多個activity中.你可以認為fragment作為一個activity中的一節模塊,fragment有自己的生命周期,接收自己的輸入事件,你可以添加或移除從運行中的activity.一個fragment必須總是嵌入在一個activity中,同時fragment的生命周期受activity而影響,舉個例子吧,當activity暫停,那麼所有在這個activity的fragments將被destroy釋放。然而當一個activity在運行比如resume時,你可以單獨的操控每個fragment,比如添加或刪除。不過因為Fragment和Activity的生命周期都比較復雜,我們分別對比下:創建一個fragment你必須創建一個Fragment的子類或存在的子類,比如類似下面的代碼
public static class AndroidFragment extends Fragment{
@Override
public View onCreateView(LayoutInflaterinflater, ViewGroup container,
Bundle savedInstanceState) {
return inflater.inflate(R.layout.android_fragment,container, false);
}
}

Fragment類的一些代碼看起來有些像Activity為了讓大家了解清楚,Android開發網給大家整理下 Fragment的生命周期大家可以參考一下網上關於生命周期的介紹 http://www.cnblogs.com/purediy/p/3276545.html,部分類似Activity的,我們詳細解釋
onCreate()
當fragment創建時被調用,你應該初始化一些實用的組件,比如在fragment暫停或停止時需要恢復的
onCreateView()
當系統調用fragment在首次繪制用戶界面時,如果畫一個UI在你的fragment你必須返回一個View當然了你可以返回null代表這個fragment沒有UI.
那麼如何添加一個Fragment到Activity中呢? Activity的布局可以這樣寫
<?xml version="1.0"encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="match_parent">
<fragment android:name="com.android.cwj.ArticleListFragment"
android:id="@+id/list"
android:layout_weight="1"
android:layout_width="0dp"
android:layout_height="match_parent" />
<fragment android:name="com.android.cwj.ArticleReaderFragment"
android:id="@+id/viewer"
android:layout_weight="2"
android:layout_width="0dp"
android:layout_height="match_parent" />
</LinearLayout>

③ fragment鏄浠涔堟剰鎬濆晩錛熸湁浠涔堢敤錛

fragment鐨勭炕璇戱細鐗囨碉紱紕庣墖銆

涓鏂囩炕璇戱細

1銆佸悕璇n.[C]

2銆佺庣墖,鐮寸墖;鏂鐗囥

3銆乀銆傜幓鐠冩澂钀藉湪鍦頒笂紕庢垚鐮寸墖銆

4銆佸強鐗╁姩璇vt銆

5銆佷嬌鎴愮庣墖

6銆佷笉鍙婄墿鍔ㄨ瘝vi銆

7銆佹垚紕庣墖銆俆銆傜楁帀涓,鎽旀垚紕庣墖銆

11銆佹垜浠鍙浠ョ湅鍒頒袱涓獮ctivity閫氳繃涓や釜Fragment鍚堝苟鍒頒竴涓獮ctivity鐨勫竷灞鏂瑰紡錛屽逛簬騫蟲澘絳夊ぇ灞忓箷璁懼囨潵璇存湁鐫涓嶉敊鐨勫睍紺洪潰鏉褲備笉榪囧洜涓篎ragment鍜孉ctivity鐨勭敓鍛藉懆鏈熼兘姣旇緝澶嶆潅錛屾垜浠鍒嗗埆瀵規瘮涓:鍒涘緩涓涓猣ragment浣犲繀欏誨壋寤轟竴涓狥ragment鐨勫瓙綾繪垨瀛樺湪鐨勫瓙綾匯

12銆丗ragment綾葷殑涓浜涗唬鐮佺湅璧鋒潵鏈変簺鍍廇ctivity涓轟簡璁╁ぇ瀹朵簡瑙f竻妤氾紝Android寮鍙戠綉緇欏ぇ瀹舵暣鐞嗕笅Fragment鐨勭敓鍛藉懆鏈熷備笂鍥炬墍紺猴紝閮ㄥ垎綾諱技Activity鐨勶紝鎴戜滑璇︾粏瑙i噴

④ Android組件之Fragment(一)---基礎知識與運用

Fragment是Android3.0後引入的一個新的API,他出現的初衷是為了適應大屏幕的平板電腦, 當然現在他仍然是平板APP UI設計的寵兒,而且我們普通手機開發也會加入這個Fragment, 我們可以把他看成一個小型的Activity,又稱Activity片段!想想,如果一個很大的界面,我們 就一個布局,寫起界面來會有多麻煩,而且如果組件多的話是管理起來也很麻煩!而使用Fragment 我們可以把屏幕劃分成幾塊,然後進行分組,進行一個模塊化的管理!從而可以更加方便的在 運行過程中動態地更新Activity的用戶界面!另外Fragment並不能單獨使用,他需要嵌套在Activity 中使用,盡管他擁有自己的生命周期,但是還是會受到宿主Activity的生命周期的影響,比如Activity 被destory銷毀了,他也會跟著銷毀!

引用官方的一張圖片,其實已經說明問題了,就是為了更好的適配大屏,在大屏的時候,不需要去在一個activity內部通過復雜的布局和界面去實現,只需要去在一個activity內部,通過多個fragment來做界面布局實現即可,而且針對於多個fragment來說, 每個fragment有單獨的生命周期,

Demo樣例,我們在一個界面中,有上下兩個fragment,如圖所示:

Step 2: Fragment創建,視圖載入,數據賦值
BlankFragment .java

Step 3: Activity在onCreate( )方法中調用setContentView()之後調用FragmentTransaction 進行事務提交
FragmentTestActivity.java

在xml中聲明兩個fragment,指定為具體的fragment

Step 1:定義Fragment的布局,就是fragment顯示內容的

Step 2:自定義一個Fragment類,需要繼承Fragment或者他的子類,重寫onCreateView()方法 在該方法中調用:inflater.inflate()方法載入Fragment的布局文件,接著返回載入的view對象
BlankFragment.java

Step 3:在需要載入Fragment的Activity對應的布局文件中添加fragment的標簽, 記住,name屬性是全限定類名哦,就是要包含Fragment的包名,如:

Step 4: Activity在onCreate( )方法中調用setContentView()載入布局文件即可!

針對在一個Activity中的某個Layout中切換Fragment,,無非兩種方法:

我們自己看一下方法注釋

源碼方法注釋裡面說的很明白,這個方法會移除所有的fragment,然後添加當前的fragment。
這時分為兩種情況,一種是fragment已有並且在前台展示,一種是未有或者在後台,針對於前者,此時replace,生命周期不會發生變化,針對後者,生命周期會重新走

分為兩種情況,一種fragment已存在,一種未存在,針對於前者,生命周期無變化,但是會回調onHiddenChanged方法,針對於後者,生命周期會創建一次。

1.Fragment是Google官方引入的一個為了適配大屏、多頁面的一個組件。您可以理解為它就是一個類而已,只不過裡麵包含了View,並且與activity的生命周期進行了關聯。
2.動態載入與靜態載入相對來說,建議使用動態載入,靜態載入固定在了xml文件中,永遠不變。
3.replace的fragment如果不在前台,會執行所有生命周期,反之不會執行任何生命周期方法;hide+show生命周期並不會發生變化,但是會回調onHiddenChanged方法,在實際開發中,建議add之後,使用hide+show來操作fragment,一方面減少資源的重復載入和創建,另外一方面提升用戶體驗感。
4.fragment的生命周期大體上和activity一致,但是前期和後期多了一些東西,因為fragment內部有view,那麼這個view需要進行創建、然後添加到activity內部,所以相應的在onCreate與onStart之間就多了幾個方法-onCreateView、onViewCreated。相同的道理,fragment的view與activity解綁,也相應的在onStop與onDestory之間多個方法-onDestroyView。onAttach與onDetach可以理解為視圖與activity產生關聯和接觸關聯,是最開始和最後的步驟。

Demo地址

⑤ 在Android開發中fragment有什麼優缺點

Fragment優點

Fragment可以使你能夠將activity分離成多個可重用的組件,每個都有它自己的生命周期和UI。

Fragment可以輕松得創建動態靈活的UI設計,可以適應於不同的屏幕尺寸。從手機到平板電腦。

Fragment是一個獨立的模塊,緊緊地與activity綁定在一起。可以運行中動態地移除、加入、交換等。

Fragment提供一個新的方式讓你在不同的安卓設備上統一你的UI。

Fragment 解決Activity間的切換不流暢,輕量切換。

Fragment 替代TabActivity做導航,性能更好。

Fragment 在4.2.版本中新增嵌套fragment使用方法,能夠生成更好的界面效果。

Fragment做局部內容更新更方便,原來為了到達這一點要把多個布局放到一個activity裡面,現在可以用多Fragment來代替,只有在需要的時候才載入Fragment,提高性能。

可以從startActivityForResult中接收到返回結果,但是View不能。

反正我是沒有看到fragment有什麼缺點(可能是我程度沒達到),再說它(fragment)就是一個api而已感覺不好就用activity就ok了。

⑥ Android——Fragment

Fragment必須總是被嵌入到一個activity之中,並且fragment的生命周期直接接受其宿主activity的生命周期的影響。你可以認為fragment是activity的一個模塊零件,它有自己的生命周期,接收它自己的輸入的事件,並且可以在activity運行時添加或者刪除。

應該將每一個fragment設計為模塊化和可復用化的activity組件。也就是說,你可以在多個activity中引用同一個fragment,因為fragment定義了它自己的布局,並且使用它本身生命周期回調的行為。

Fragment比Activity多了幾個額外的生命周期回調方法:

管理fragment生命周期與管理activity生命周期很相像,像activity一樣,fragment也有三種狀態:
1、Resumed:
fragment在運行中的activity中可見。

2、Paused:
另一個activity處於前台且得到焦點,但是這個fragment所在的activtiy仍然可見(前台activity部分透明,或者沒有覆蓋全屏)。

3、Stopped:
fragment不可見。要麼宿主activity已經停止,要麼fragment已經從activity上移除,但已被添加到後台棧中。一個停止的fragment仍然活著(所有的狀態和成員信息仍然由系統保留著)。但是,它對於用戶來講已經不再可見,並且如果activity被殺掉,它也將被殺掉。

如果activity的進程被殺掉了,在activity被重新創建時,你恢復fragment狀態。可以執行fragment的onSaveIntanceState()來保存狀態(注意:fragment是在onCreate(),onCreateView()或者onActivityCreate()中進行恢復)。

在生命周期方面,activity和fragment之間一個很重要的不同就是在各自的後台棧中是如何存儲的。當activity停止時,默認情況下activity被安置在由系統管理的activity後台棧中;fragment僅當在一個事務被移除時,通過顯式調用addToBackStack()請求保存的實例,該fragment才被置於由宿主activity管理的後台棧。

類似與Android系統為Activity維護一個任務棧,我們也可以通過Activity維護一個回退棧來保存每次Fragment事務發生的變化。

如果你將Fragment任務添加到回退棧,當用戶點擊後退按鈕時,將看到上一次的保存的Fragment。一旦Fragment完全從後退棧中彈出,用戶再次點擊後退鍵,則退出當前Activity。

通過Arguments創建Fragment,不建議通過為Fragment添加帶參數的構造函數

1、FragmentPagerAdapter:對於不再需要的fragment,選擇調用detach方法,僅銷毀視圖,並不會銷毀fragment實例。

2、FragmentStatePagerAdapter:會銷毀不再需要的fragment,當當前事務提交以後,會徹底的將fragment從當前Activity的FragmentManager中移除。

3、懶載入,核心方法是 setUserVisibleHint()

原因1:橫豎屏切換,造成Fragment重新實例化。
原因2:按下Home鍵,Activity處於後台,由於內存不足被銷毀,重新喚醒時Fragment重新實例化。

註:出現的原因是在 API24 之前的 v4包 的源碼問題,
解決方案:通過檢查onCreate的參數Bundle savedInstanceState就可以判斷,當前是否發生Activity的重新創建:

默認的savedInstanceState會存儲一些數據,只有在savedInstanceState==null時,才進行創建Fragment實例:

熱點內容
qq為什麼密碼修改好了就進不去 發布:2024-11-26 11:37:05 瀏覽:382
電容為啥耐壓越大存儲量越小 發布:2024-11-26 11:31:52 瀏覽:189
天然氣車載儲氣瓶泄露處置腳本 發布:2024-11-26 11:17:36 瀏覽:254
換ip的伺服器 發布:2024-11-26 11:17:29 瀏覽:75
容器平台怎麼看配置 發布:2024-11-26 11:06:09 瀏覽:940
qq的xml源碼 發布:2024-11-26 11:04:05 瀏覽:704
ip設計緩存設置 發布:2024-11-26 10:56:49 瀏覽:107
c語言k值 發布:2024-11-26 10:48:53 瀏覽:870
Java霸王大陸 發布:2024-11-26 10:44:52 瀏覽:704
樂高機器人怎麼編程 發布:2024-11-26 10:36:12 瀏覽:374