Fragment事務
Fragment類引入到Honeycomb時,爲協同工作,Activity類被更改爲含有FragmentManager類,FragmentManager類負責管理fragment並將它們的視圖添加到activity的視圖層級結構中。
-
FragmentManager類具體管理的是:
1. fragment隊列
2. fragment事務的回退棧
-
fragment事務被用來 添加、移除、附加、分離或替換 fragment隊列中的fragment。這是使用fragment在運行時組裝和重新組裝用戶界面的核心方式。FragmentManager管理者fragment事務的回退棧。
-
FragmentManager.beginTransaction()方法創建並返回FragmentTransaction實例。FragmentTransaction類使用了一個fluent interface接口方法,通過該方法配置FragmentTransaction返回FragmentTransaction類對象,而不是void,由此可得到一個FragmentTransaction隊列。
-
activity因設備旋轉或回收內存被銷燬後重建時,Activity.onCreate()方法會響應activity重建而被調用。activity被銷燬時,它的FragmentManager會將fragment隊列保存下來。這樣,activity重建時,新的FragmentManager會首先獲取保存的隊列,然後重建fragment隊列,從而恢復到原來的狀態。
Fragment實現選項卡功能
package com.ashzheng.studydemo.demo4;
import android.app.Activity;
import android.app.FragmentManager;
import android.app.FragmentTransaction;
import android.os.Bundle;
import android.widget.RadioGroup;
import com.ashzheng.studydemo.R;
public class Demo4Activity extends Activity {
private Demo4Fragment1 fragment1;
private Demo4Fragment2 fragment2;
private Demo4Fragment3 fragment3;
private Demo4Fragment4 fragment4;
private FragmentManager fragmentManager;
private RadioGroup radioGroup;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_demo4);
radioGroup = (RadioGroup) findViewById(R.id.demo4_rg);
radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(RadioGroup radioGroup, int i) {
selectFragment(i);
}
});
fragmentManager = getFragmentManager();
selectFragment(R.id.demo4_rbt3);
}
private void selectFragment(int checkedId) {
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
hideFragment(fragmentTransaction);
switch (checkedId) {
case R.id.demo4_rbt1:
if (null == fragment1) {
fragment1 = new Demo4Fragment1();
fragmentTransaction.add(R.id.demo4_layout, fragment1);
} else {
fragmentTransaction.show(fragment1);
}
break;
case R.id.demo4_rbt2:
if (null == fragment2) {
fragment2 = new Demo4Fragment2();
fragmentTransaction.add(R.id.demo4_layout, fragment2);
} else {
fragmentTransaction.show(fragment2);
}
break;
case R.id.demo4_rbt3:
if (null == fragment3) {
fragment3 = new Demo4Fragment3();
fragmentTransaction.add(R.id.demo4_layout, fragment3);
} else {
fragmentTransaction.show(fragment3);
}
break;
case R.id.demo4_rbt4:
if (null == fragment4) {
fragment4 = new Demo4Fragment4();
fragmentTransaction.add(R.id.demo4_layout, fragment4);
} else {
fragmentTransaction.show(fragment4);
}
break;
}
fragmentTransaction.commit();
}
private void hideFragment(FragmentTransaction fragmentTransaction) {
if(null != fragment1){
fragmentTransaction.hide(fragment1);
}
if(null != fragment2){
fragmentTransaction.hide(fragment2);
}
if(null != fragment3){
fragmentTransaction.hide(fragment3);
}
if(null != fragment4){
fragmentTransaction.hide(fragment4);
}
}
}