標籤:
Fragment允許將activity拆分成多個完全獨立封裝的可重用控制項。每個組件有它自己的生命週期和UI布局。(類似於一個嵌入在activity中的activity)
通過繼承Fragment來建立一個新的Fragment,大多數情況下,需要為Fragment分配一個UI(xml布局檔案),也可以建立一個沒有任何UI的後台行為的Fragment。
public class MyFragment extends Fragment{
//調用該方法串連它的父Activity
@Override
public void onAttach(Activity Activity){
super.onAttach(Activity);
//擷取對父Activity的引用
}
//調用該方法來進行Fragment的初始建立
@Override
public void onCreate(Bundle saveInstanceState){
super.onCreate(saveInstanceState);
//初始化Fragment
}
//Fragment建立完畢後,繼續建立它自己的使用者介面時調用該方法
@Override
public void onCreateView(LayoutInflater inflater,
ViewGroup container, Bundle savedInstanceState){
//建立或填充Fragment的UI,並返回它,沒有UI返回null
return inflater.inflate(R.layout.head_fragment_viead, container, false);
}
//一旦父Activity和Fragment的UI已被建立,則調用該方法。
@Override
public void onActivityCreated(Bundle savedInstanceState){
super.onActivityCreated(savedInstanceState);
//完成初始化---尤其是父Activity被初始化完成後或者Fragment的View被完全填充
後才能做的事
}
//在可見生命週期開始時調用
@Override
public void onStart(){
super.onStart();
//應用所有需要的UI變化,現在Fragment是可見的
}
//在活動生命週期開始時調用
@Override
public void onResume(){
super.onResume();
//恢複所有暫停Fragment需要的UI更新,線程或進程。但在非使用中是暫停
}
//在活動生命週期結束時調用
@Override
public void onPause(){
//當Fragment不是活動的前台Fragment時,需要暫停UI的更新,掛起線程或者暫停那些不需要更新的CPU的集中處理。由於調用這個方法後,進程可能被終止,所以要儲存 所有的編輯和狀態改變資訊
super.onPause();
}
//當活動生命週期結束時,調用該方法儲存UI的狀態變化
@Override
public void onSaveInstanceState(Bundle savedInstanceState){
//將UI的狀態改變資訊儲存到savedInstanceState中
super.onSaveInstanceState(savedInstanceState);
}
//在可見生命週期結束時調用
@Override
public void onStop(){
//當Fragment不可見時,暫停其餘的UI更新、掛起線程或者暫停不再需要的處理
super.onStop();
}
//當Fragment的View被分離時,調用該方法
@Override
public void onDestroyView(){
//清楚資源相關的View
super.onDestroyView();
}
//在整個生命週期結束時調用該方法
@Override
public void onDestroy(){
//清楚所有的資源,包括結束線程和關閉資料庫連接等
super.onDestroy();
}
//當Fragment從它的父Activity上分離時,調用該方法
@Override
public void onDetach(){
super.onDetach();
}
}
通過靜態方式向Activity中填充Fragment。
<fragment
android:name="package.MyFragment"
/>
通過動態方式向Activity中填充Fragment。
Fragment狀態轉換與他相應的Activity的狀態轉換密切相關。當Fragment暫停或停止時,儲存的所有的UI狀態和持久化的資料非常重要。
每個Activity都包含一個Fragment Manager來管理它包含的Fragment。
//得到FragmentManager
FragmentManager fragmentManager = getFragmentManager();
//得到FragmentTransaction
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
//添加,刪除,替換,指定動畫,添加到back棧中。
//添加
fragmentTransaction.add(R.id.title_fragment,new MyFragment());
//尋找,刪除
Fragment fragment = fragmentManager.findFragmentById(R.id.title_fragment)
fragmentTransaction.remove(fragment);
//替換
fragmentTransaction.replace(R.id.body_fragment,new BodyFragment(index))
//設定back棧
String tag = null;
fragmentTransaction.addToBackStack(tag);
//添加動畫,接收兩個動畫XML
fragmentTransaction.setCustomAnimations(R.animator.silde_in_left,
R.animator.silde_out_right);
fragmentTransaction.commit();
?通過回調介面向Activity通訊。在Fragment需要和它的主Activity共用事件的地方,最好在Fragment中建立一個callback介面,而主Activity必須實現它。
private MyListener myListener;
private String str;
public interface MyListener{
public void getStr(String str);
}
public void onAttach(Activity activity){
super.onAttach(activity);
//catch異常
myListener = (MyListener)activity;
str = new String("callback");
myListener.getStr(str);
}
沒有使用者介面的Fragment適合於定期和UI互動的背景工作或者因配置改變而導致Activity重新啟動時,儲存狀態變得特別重要的場合。
fragmentManager.beginTransaction.add(workerFragment,TAG).commit;
myFragment = (MyFragment) fragmentManager.findFragmentByTag(TAG);
使用方便的Fragment子類。DialogFragment,ListFragment,WebViewFragment。
初學_Android4進階編程-2 Fragment