- Android入門基礎:從這裡開始
- Android分享操作
- Android多媒體
- Android圖像與動畫
- Android網絡連接與雲服務
- Android聯繫人與位置信息
- Android可穿戴應用
- Android TV應用
- Android企業級應用
- Android交互設計
- Android界面設計
- Android用戶輸入
- Android後臺任務
- Android性能優化
- Android安全與隱私
- Android測試程序
創建一個Fragment
編寫:fastcome1985 - 原文:http://developer.android.com/training/basics/fragments/creating.html
- 我們可以把fragment想象成activity中一個模塊化的部分,它擁有自己的生命週期,接收自己的輸入事件,可以在acvitity運行過程中添加或者移除(有點像"子activity",可以在不同的activity裡面重複使用)。這一課教我們將學習繼承Support Library 中的Fragment,使應用在Android1.6這樣的低版本上仍能保持兼容。
Note: 如果APP的最低API版本是11或以上,則不必使用Support Library,我們可以直接使用API框架中的Fragment,本課主要講解基於Support Library的API,Support Library有一個特殊的包名,有時與平臺版本的API名字存在略微不同。
- 在開始這節課前,必須先讓在項目中引用Support Library。如果沒有使用過Support Library,可以根據文檔 Support Library Setup 來設置項目使用Support Library。當然,也可以使用包含action bar的 v7 appcompat library。v7 appcompat library 兼容Android2.1(API level 7),也包含了Fragment APIs。
創建一個Fragment類
創建一個fragment,首先需要繼承Fragment類,然後在關鍵的生命週期方法中插入APP的邏輯,就像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生命週期發生變化時,fragment通過生命週期回調函數管理其狀態。例如,當activity的onPause()被調用時,它裡面的所有fragment的onPause()方法也會被觸發。
更多關於fragment的聲明週期和回調方法,詳見Fragments developer guide.
用XML將fragment添加到activity
- fragments是可重用的,模塊化的UI組件,每個Fragment的實例都必須與一個FragmentActivity關聯。我們可以在activity的XML佈局文件中定義每一個fragment來實現這種關聯。
Notes:FragmentActivity是Support Library提供的一個特殊activity ,用於處理API11版本以下的fragment。如果我們APP中的最低版本大於等於11,則可以使用普通的Activity。
- 下面是一個XML佈局的例子,當屏幕被認為是large(用目錄名稱中的
large
字符來區分)時,它在佈局中增加了兩個fragment.
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>
**Notes:**更多關於不同屏幕尺寸創建不同佈局的信息,請閱讀Supporting Different Screen Sizes
- 然後將這個佈局文件用到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);
}
}
- 如果用的是 v7 appcompat library,activity應該改為繼承ActionBarActivity,ActionBarActivity是FragmentActivity的一個子類(更多關於這方面的內容,請閱讀Adding the Action Bar)。
**Note:**當通過XML佈局文件的方式將Fragment添加進activity時,Fragment是不能被動態移除的。如果想要在用戶交互的時候把fragment切入與切出,必須在activity啟動後,再將fragment添加進activity。這部分內容將在下節課闡述。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论