關於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);
}
}