天天看點

Fragment初學2——使用Fragment

一般建立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/tools

    android: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類似,就不粘代碼了,我會上傳源代碼

源代碼

繼續閱讀