【 Android 】Fragment
目前ECLIPSE開發的最新API版本為 19( android 4.4.2)
Android是在Android 3.0 (API level 11)開始導入fragment的。
Fragment
可以將fragment想成activity中的模組,可每個fragment有自已的佈局,有自已的生命周期,而fragment的生命周期是嵌入在activity中的,意思是當activity被銷毀時,fragment也會被銷毀,所以fragment是不能單獨存在的,但一個activity可以擁有很多個fragment也可以載入或移除,當在運行時可以分別操作各個fragment。(若要詳細了解,請參考google developer )
下列是一個簡單的fragment的範例,可以切換兩個fragment,layout的部份就不寫出來了:
1. 首先會在main activity中發現在新專案建立時,就會有一個fragment並在onCreate中載入,記住這裡是"載入"。
2. 實際的fragment在底下建立,在onCreateView當中將fragment的layout載入,並可以在這裡操作fragment上所有佈局的元件。
3. 新增一個fragment的layout檔,如下圖會看到新增的fragment_a.xml
5. 再來新增兩個button測試切換的動作,此時需注意在程式一開始建立的時候是用add去載入fragment,而這個地方則是使用replace去作切換的動作; 而add和replace是兩個fragment的方法,不一樣的地方在於:
add: 是把一個fragment加到一個container的容器裡(R.id.container)
replace:是將同一個容器裡的fragment都remove,然後再放入當前的fragment
6. 依照上述的作法就可以看到下例的畫面
Android是在Android 3.0 (API level 11)開始導入fragment的。
Fragment
可以將fragment想成activity中的模組,可每個fragment有自已的佈局,有自已的生命周期,而fragment的生命周期是嵌入在activity中的,意思是當activity被銷毀時,fragment也會被銷毀,所以fragment是不能單獨存在的,但一個activity可以擁有很多個fragment也可以載入或移除,當在運行時可以分別操作各個fragment。(若要詳細了解,請參考google developer )
下列是一個簡單的fragment的範例,可以切換兩個fragment,layout的部份就不寫出來了:
1. 首先會在main activity中發現在新專案建立時,就會有一個fragment並在onCreate中載入,記住這裡是"載入"。
if (savedInstanceState == null) {
getSupportFragmentManager().beginTransaction()
.add(R.id.container, new PlaceholderFragment()).commit();
}
/**
* A placeholder fragment containing a simple view.
*/
public static class PlaceholderFragment extends Fragment {
public PlaceholderFragment() {
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_main, container,false);
return rootView;
}
}
4. 再來到MainActivity.java裡新增一個fragment元件,自行建立這個類別並加入onCreateView的overide,然後將要載入的fragment指定到新建的fragment佈局。
public static class AFragment extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_a, container,false);
return rootView;
}
}
add: 是把一個fragment加到一個container的容器裡(R.id.container)
replace:是將同一個容器裡的fragment都remove,然後再放入當前的fragment
Button btn = (Button) findViewById(R.id.nextBtn);
btn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
getSupportFragmentManager().beginTransaction().replace(R.id.container, new AFragment()).commit();
}
});
Button btn1 = (Button) findViewById(R.id.backBtn);
btn1.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
getSupportFragmentManager().beginTransaction().replace(R.id.container, new PlaceholderFragment()).commit();
}
});
6. 依照上述的作法就可以看到下例的畫面
![]() |
載入和按下back時的fragment |
![]() |
按下next後切換到第二個fragment |
留言
張貼留言