一般建立Fragment需要實作如下三個方法。
onCreate():系統建立Fragment對象後回調該方法,實作代碼中隻初始化Fragment中的元件。
onCreateView(): 當Fragment繪制界面元件時回調該方法,該方法傳回的view就是該Fragment所顯示的View。
onPause(): 當使用者離開該Fragment時回調該方法。
好了,開始使用吧,最簡單的用法——靜态使用Fragment
步驟:
1、首先繼承Fragment,重寫onCreateView()方法設定Fragemnt的布局
2、在Activity中聲明此Fragment,然後當做普通的View元件使用
下面一個具體例子:
TitleFragment的布局檔案:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="
http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="45dp"
android:background="@drawable/toolbar_bg"
>
<ImageButton
android:id="@+id/imgBtn_title_fragment"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_marginLeft="3dp"
android:background="@drawable/imgbtn_bg" />
<TextView
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:gravity="center"
android:text="Fragment标題"
android:textColor="#fff"
android:textSize="20sp"
android:textStyle="bold" />
</RelativeLayout>
TitleFragment.java類:
public class TitleFragment extends Fragment {
private ImageButton mImageButton;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_title, container, false);
mImageButton = (ImageButton) view.findViewById(R.id.imgBtn_title_fragment);
mImageButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(getActivity(), "這是TitleFragment! ",
Toast.LENGTH_LONG).show();
}
});
return view;
}
}
同理FirstFragment的布局檔案:
"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:text="第一個Fragment"
android:textSize="20sp"
android:textStyle="bold" />
FirstFragment .java類:
public class FirstFragment extends Fragment {
return inflater.inflate(R.layout.fragment_first, container, false);
MainActivity布局如下:
xmlns:tools="
http://schemas.android.com/toolsandroid:layout_height="match_parent" >
<fragment
android:id="@+id/fragment_title_main"
android:name="com.example.activity.TitleFragment"
android:layout_height="45dp" />
android:id="@+id/fragment_first_main"
android:name="com.example.activity.FirstFragment"
android:layout_below="@+id/fragment_title_main" />
MainActivity.java類
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_main);
}
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
說完了靜态使用Fragment,下面再說下如何動态使用吧
首先修改下MainActivity的布局檔案
<FrameLayout
android:id="@+id/framelayout_fragment_main"
android:layout_above="@+id/linearlayout_toolbar_main"
<LinearLayout
android:id="@+id/linearlayout_toolbar_main"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentLeft="true"
android:background="@drawable/toolbar_bg" >
<TextView
android:id="@+id/textView1_main"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_weight="1"
android:gravity="center"
android:text="第一個"
android:textColor="#fff"
android:textSize="20sp" />
android:id="@+id/textView2_main"
android:text="第二個"
</LinearLayout>
需要使用FragmentManager對Fragment進行動态的加載,這裡使用的是replace方法,下一節再詳細介紹FragmentManager的常用API。
我們第一節說過Fragment是Android3.0引入的API,是以如果使用以前的版本,需要引入v4的包,然後Activity繼承FragmentActivity,然後通過 getSupportFragmentManager獲得FragmentManager。是以還是建議把Manifest檔案的uses-sdk的 minSdkVersion和targetSdkVersion都改為11以上,這樣就不必引入v4包了。
public class MainActivity extends Activity implements OnClickListener {
private Fragment mFirst, mTwo;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
// getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
// WindowManager.LayoutParams.FLAG_FULLSCREEN);
setContentView(R.layout.activity_main);
TextView First = (TextView) findViewById(R.id.textView1_main);
TextView Two = (TextView) findViewById(R.id.textView2_main);
First.setOnClickListener(this);
Two.setOnClickListener(this);
// 設定預設的Fragment
setDefaultFragment();
private void setDefaultFragment() {
FragmentManager fm = getFragmentManager();
FragmentTransaction transaction = fm.beginTransaction();
mFirst = new FirstFragment();
transaction.replace(R.id.framelayout_fragment_main, mFirst);
transaction.commit();
public void onClick(View v) {
// TODO Auto-generated method stub
// 開啟Fragment事務
switch (v.getId()) {
case R.id.textView1_main:
if (mFirst == null) {
mFirst = new FirstFragment();
// 使用目前Fragment的布局替代id_content的控件
transaction.replace(R.id.framelayout_fragment_main, mFirst);
break;
case R.id.textView2_main:
if (mTwo == null) {
mTwo = new TwoFragment();
transaction.replace(R.id.framelayout_fragment_main, mTwo);
}
// transaction.addToBackStack();
// 事務送出
代碼中的TwoFragment和FirstFragment類似,就不粘代碼了,我會上傳源代碼
源代碼