技術學習記錄

[Android]Fragment元件

關於Fragment

Fragment,中文名稱叫做片段。是依附在Activity內的View類別。

Fragment最早是在Android 3.0加入的,因為平板電腦的畫面夠大,所以Google推出了這個元件,目的是要讓平板電腦的畫面能更夠更有效的分配。

到了Android 4.0,Fragment直接保留了下來,直到現在依舊還是使用率蠻高的元件之一。

通常一個Activity內可以加入多個Fragment,讓我們可以依照我們的需求對程式的畫面進行有效的切割。

另外,Fragment有自己的生命週期。且Fragment跟Activity的生命週期互相有連動。
當Activity停止時,Fragment也會跟著停止,當Activity被系統清掉時,Fragment也會跟著被清除。

以下是Fragment的生命週期:

使用Fragment:

1.在專案左側視窗中按下右鍵,New>Fragment>Fragment>Fragment (Blank)

2.接著就會自動生成Fragment的佈局文件跟原始碼,如下:

另外,Fragment還能和ViewPager結合,實現滑動切換分頁。

1.首先在Activity的布局文件中加入ViewPager,如下:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:ads="http://schemas.android.com/apk/lib/com.google.ads"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <android.support.v4.view.ViewPager
        android:id="@+id/pager"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent" />

</LinearLayout>

2.實作ViewPager的FragmentPagerAdapter,如下:

public static class ViewPagerAdapter extends FragmentPagerAdapter {

    private String[] values = new String[] { "page1", "page2" };

    public ViewPagerAdapter(FragmentManager fm) {
        super(fm);
    }

    @Override
    public Fragment getItem(int position) {
        ViewPagerFragment fragment = new ViewPagerFragment();
        Bundle args = new Bundle();
        args.putString("value", values[position]);
        fragment.setArguments(args);
        return fragment;
    }

    @Override
    public int getCount() {
        return values.length;
    }
}

3.建立Fragment元件,如下:

public static class ViewPagerFragment extends Fragment {

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        TextView textView = new TextView(getActivity());
        textView.setGravity(Gravity.CENTER);
        textView.setText(getArguments().getString("value"));
        return textView;
    }
}

4.最後在Activity中,對ViewPager初始化並傳入ViewPager Adapter即可,如下:

public class MainActivity extends Activity {

    private ViewPager mPager;
    private ViewPagerAdapter mAdapter;
 
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);

        mAdapter = new ViewPagerAdapter(getSupportFragmentManager());
        mPager = (ViewPager) findViewById(R.id.pager);
        mPager.setAdapter(mAdapter);
	}
}

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *