android Fragments詳解三:實現Fragment的介面
為fragment新增使用者介面
fragment一般作為activity的使用者介面的一部分,把它自己的layout嵌入到activity的layout中。 一個
要為fragment提供layout,你必須實現onCreateView()回撥方法,然後在這個方法中返回一個View物件,這個物件是fragment的layout的根。
注:如果你的fragment是從ListFragment中派生的,就不需要實現onCreateView()方法了,因為預設的實現已經為你返回了ListView控制元件物件。
要從onCreateView()方法中返回layout物件,你可以從layoutxml中生成layout物件。為了幫助你這樣做,onCreateView()提供了一個LayoutInflater物件。
舉例:以下程式碼展示了一個Fragment的子類如何從layoutxml檔案example_fragment.xml中生成物件。
publicstaticclassExampleFragmentextendsFragment{
@Override
publicViewonCreateView(LayoutInflaterinflater,ViewGroupcontainer,BundlesavedInstanceState){
//Inflate the layout for this fragment
returninflater.inflate(R.layout.example_fragment,container,false);
}
}
onCreateView()引數中的container是存放fragment的layout的ViewGroup物件。savedInstanceState引數是一個Bundle,跟activity的onCreate()中Bundle差不多,用於狀態恢復。但是fragment的onCreate()中也有Bundle引數,所以此處的Bundle中存放的資料與onCreate()中存放的資料還是不同的。至於詳細資訊,請參考“操控fragment的生命週期”一節。
Inflate()方法有三個引數:
1layout的資源ID。
2存放fragment的layout的ViewGroup。
3布林型資料表示是否在建立fragment的layout期間,把layout附加到container上(在這個例子中,因為系統已經把layout插入到container中了,所以值為false,如果為true會導至在最終的layout中建立多餘的ViewGroup(這句我看不明白,但我翻譯的應該沒錯))。
現在你看到如何為fragment建立layout了,下面講述如何把它新增到activity中。
把fragment新增到activity
一般情況下,fragment把它的layout作為activitiy的loyout的一部分合併到activity中,有兩種方法將一個fragment新增到activity中:
方法一:在activity的layoutxml檔案中宣告fragment
如下程式碼,一個activity中包含兩個fragment:
<?xmlversion="1.0"encoding="utf-8"?>
<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="match_parent">
<fragmentandroid:name="com.example.news.ArticleListFragment"
android:id="@+id/list"
android:layout_weight="1"
android:layout_width="0dp"
android:layout_height="match_parent"/>
<fragmentandroid:name="com.example.news.ArticleReaderFragment"
android:id="@+id/viewer"
android:layout_weight="2"
android:layout_width="0dp"
android:layout_height="match_parent"/>
</LinearLayout>
<fragment>中宣告一個fragment。
當系統建立上例中的layout時,它例項化每一個fragment,然後呼叫它們的onCreateView()方法,以獲取每個fragment的layout。系統把fragment返回的view物件插入到<fragment>元素的位置,直接代替<fragment>元素。
注:每個fragment都需要提供一個ID,系統在activity重新建立時用它來恢復fragment們,你也可以用它來操作fragment進行其它的事物,比如刪除它。有三種方法給fragment提供ID:
1 為android:id屬性賦一個數字。
2 為android:tag屬性賦一個字串。
3如果你沒有使用上述任何一種方法,系統將使用fragment的容器的ID。
方法二:在程式碼中新增fragment到一個ViewGroup
這種方法可以在執行時,把fragment新增到activity的layout中。你只需指定一個要包含fragment的ViewGroup。
為了完成fragment的事務(比如新增,刪除,替換等),你必須使用FragmentTransaction的方法。你可以從activity獲取到FragmentTransaction,如下:
FragmentManagerfragmentManager =getFragmentManager()
FragmentTransactionfragmentTransaction =fragmentManager.beginTransaction();
然後你可以用add()方法新增一個fragment,它有引數用於指定容納fragment的ViewGroup。如下:
ExampleFragmentfragment =newExampleFragment();
fragmentTransaction.add(R.id.fragment_container,fragment);
fragmentTransaction.commit();
Add()的第一個引數是容器ViewGroup,第二個是要新增的fragment。一旦你通過FragmentTransaction對fragment做出了改變,你必須呼叫方法commit()提交這些改變。
不僅在無介面的fragment中,在有介面的fragment中也可以使用tag來作為為一標誌,這樣在需要獲取fragment物件時,要呼叫findFragmentTag()。
新增一個沒有介面的fragment
上面演示瞭如何新增fragment來提供介面,然而,你也可以使用fragment為activity提供後臺的行為而不用顯示fragment的介面。
要新增一個沒有介面的fragment,需在activity中呼叫方法add(Fragment,String)(它支援用一個唯一的字串做為fragment的”tag”,而不是viewID)。這樣新增的fragment由於沒有介面,所以你在實現它時不需呼叫實現onCreateView()方法。
使用tag字串來標識一個fragment並不是只能用於沒有介面的fragment上,你也可以把它用於有介面的fragment上,但是,如果一個fragment沒有介面,tag字串將成為它唯一的選擇。獲取以tag標識的fragment,需使用方法findFragmentByTab()。
轉自:http://blog.csdn.net/niu_gao/article/details/7171697
相關文章
- android Fragments詳解二:建立FragmentAndroidFragment
- android Fragments詳解四:管理fragmentAndroidFragment
- android Fragments詳解一:概述AndroidFragment
- Android_Fragment_Fragment詳解AndroidFragment
- android Fragments詳解七:fragement示例AndroidFragment
- android Fragments詳解五:與activity通訊AndroidFragment
- android Fragments詳解六:處理fragement的生命週期AndroidFragment
- Android仿微信介面--使用Fragment實現(慕課網筆記)AndroidFragment筆記
- Fragment詳解Fragment
- Android動畫實現詳解Android動畫
- Android Fragment實現按鈕間的切換AndroidFragment
- 探索 單個Fragment實現沉浸式,其餘Fragment不實現的解決辦法Fragment
- Fragment:關於Avoid non-default constructors in fragments的錯誤FragmentStruct
- Android 碎片(Fragment)講解AndroidFragment
- Android:Fragment懶載入的實現以及自己的封裝思路AndroidFragment封裝
- Android圖文混排實現方式詳解Android
- VirtualView Android 實現詳解(三)—— 新增一個自定義控制元件ViewAndroid控制元件
- Android 三種動畫詳解Android動畫
- Android中使用FragmentManager管理fragmentsAndroidFragment
- android Fragment與Activity互動,互相發資料(附圖詳解)AndroidFragment
- Android Fragment用法知識點的講解AndroidFragment
- Android使用(TabLayout+ViewPager+fragment)與(FragmentTabHost+ViewPager+Fragment)實現底部狀態列切換AndroidTabLayoutViewpagerFragment
- Android中Fragment巢狀Fragment,切換Fragment時不顯示檢視的原因及解決方法AndroidFragment巢狀
- Android RecyclerView 通用介面卡的實現AndroidView
- Android APK開發:Menu介面功能詳解AndroidAPK
- Android開發之ViewPager+Fragment+FragmentTabHost實現底部選單AndroidViewpagerFragment
- Android 多個Fragment巢狀導致的三大BUGAndroidFragment巢狀
- Android 詳解Gradle(3.1.4)實現多渠道打包AndroidGradle
- 原生js三級導航選單實現詳解JS
- 【Android】在Activity頁面中如何實現Fragment資料的緩載入AndroidFragment
- VirtualView Android實現詳解(二)—— 虛擬控制元件的設計與實現ViewAndroid控制元件
- Android之FragmentAndroidFragment
- 理解 Android FragmentAndroidFragment
- Android TaskAffinity實踐詳解Android
- SSO單點登入三種情況的實現方式詳解
- Navigation問題詳解——Fragment建立新的例項NavigationFragment
- TabLayout+ViewPager+Fragment實現懶載入完全解決方案TabLayoutViewpagerFragment
- 【Android Fragment】友盟統計 Fragment 頁面顯示隱藏的完美解決方案AndroidFragment