編輯:Android開發實例
你可以認為Fragment作為Activity的一個模塊部分,有它自己的生命周期,獲取它自己的事件,並且你可以在Activity運行的時候添加或者移除它(有點像你可以在不同的Activity中重用的一個”子Activity“)。這節課程講述如何使用Support Library繼承Fragment類,所以你的應用程序仍然是兼容運行的系統版本低於Android1.6的設備。
注意:如果你決定你的應用要求的最低的API級別是11或者更高,你不需要使用Support Library,反而能使用Frameword內的Fragment和相關API。要注意,這節課程主要講使用Support Library的API,它使用特殊的包名,並且有些時候和包含在平台中版本API的名稱略有不同。
在你開始這節課程之前,你必須配置你的Android項目使用Support Library。如果之前你沒有使用過Support Library,遵照Support Library Setup文檔,配置你的項目使用v4 Library。然而,你也能包含在你的Activity中Action Bar
創建Fragment
你可以把一個Fragment想象成一個Activity的模塊區域,它有自己的生命周期,接收它自己的輸入事件,並且你可以在Activity運行時添加和刪除它(這有點像一個子Activity,你可以在不同的Activity中重用它們)。本節課向你介紹如何使用支持類庫來擴展Fragment,以便讓你的應用程序能夠在像Android1.6那樣的較舊版本上的兼容性。
注意:如果因為一些原因,你決定你的應用程序需要的API級別在11以上,那麼你就不需要使用支持類庫,並且可以使用框架內置的Fragment類和相關的API來代替。要注意的是本課的重點是使用支持類庫中的API,它使用一個特殊的包簽名,並且某些時候API的名稱會比包含在平台內的版本有稍微的不同。
創建Fragment類
要創建一個Fragment,就要繼承Fragment類,然後重寫關鍵的生命周期方法,把你的應用程序邏輯插入其中,這跟Activity類類似。
創建Fragment時的一個不同點是,你必須使用onCreateView()回調來定義布局。實際上,為了獲得一個正在運行的Fragment,這只是你所需要的唯一的回調方法。例如,下面是一個簡單的指定了自己布局的Fragment:
import android.os.Bundle; import android.support.v4.app.Fragment; import android.view.LayoutInflater; import android.view.ViewGroup; public class ArticleFragment extends Fragment { @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // Inflate the layout for this fragment return inflater.inflate(R.layout.article_view, container, false); } }
就像一個Activity,Fragment應該實現其他的生命周期回調方法,從而允許你管理它在Activity中的狀態(添加或刪除),以及Activity在它生命周期狀態間轉換時的狀態。例如,當Activity的onPause()方法被調用時,Activity中的任何Fragment也會接收到對onPause()方法的調用。
有關Fragment的生命周期和有效的回調方法,請看Fragments開發指南。
使用XML把一個Fragment添加到一個Activity中
Fragment是可復用的、模塊化的UI組件,每個Fragment類的實例都必須跟一個父類是FragmentActivity的Activity相關聯。通過在你的Activity布局XML文件內定義每個Fragment可以完成這種關聯。
注意:FragmentActivity是一個支持類庫中提供的特殊的Activity,它用於處理系統版本是API Level 11以前的Fragment。如果你使用的系統版本最低是API Level 11或更高,那麼就就可以使用常規的Activity。
當屏幕被認為足夠大時,下例布局文件就會把兩個Fragment添加到一個Activity中(該文件被放在由large限定的目錄名中)。
res/layout-large/news_articles.xml: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="fill_parent"> <fragment android:name="com.example.android.fragments.HeadlinesFragment" android:id="@+id/headlines_fragment" android:layout_weight="1" android:layout_width="0dp" android:layout_height="match_parent" /> <fragment android:name="com.example.android.fragments.ArticleFragment" android:id="@+id/article_fragment" android:layout_weight="2" android:layout_width="0dp" android:layout_height="match_parent" /> </LinearLayout>
提示:關於給不同屏幕尺寸創建布局的信息,請看支持不同的屏幕尺寸。
以下是使用這個布局的Activity:
import android.os.Bundle; import android.support.v4.app.FragmentActivity; public class MainActivity extends FragmentActivity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.news_articles); } }
注意:當你通過在布局XML文件中定義Fragment的方式把Fragment添加給Activity布局時,你不能在運行時刪除該Fragment。如果你打算在用戶交互期間切換Fragment,你就必須在Activity被首次啟動時把Fragment添加到Activity中。
可以顯示在的Android任務,通過加載進度條的進展。進度條有兩種形狀。加載欄和加載微調(spinner)。在本章中,我們將討論微調(spinner)。Spinner 用
最近項目中需要用到ListView下拉刷新的功能,一開始想圖省事,在網上直接找一個現成的,可是嘗試了網上多個版本的下拉刷新之後發現效果都不怎麼理想。有些是因為功能
JSON代表JavaScript對象符號。它是一個獨立的數據交換格式,是XML的最佳替代品。本章介紹了如何解析JSON文件,並從中提取所需的信息。Android提供了四個
JSON代表JavaScript對象符號。它是一個獨立的數據交換格式,是XML的最佳替代品。本章介紹了如何解析JSON文件,並從中提取所需的信息。Android提供了四個