Fragment的使用總結
簡述:
你可以把Fragment當成Activity的一個界面的一個組成部分,甚至Activity的界面可以完全有不同的Fragment組成,更帥氣的是Fragment擁有自己的生命週期和接收、處理用戶的事件,這樣就不必在Activity寫一堆控件的事件處理的代碼了。更爲重要的是,你可以動態的添加、替換和移除某個Fragment。
1.Fragment的生命週期onAttach(Activity)
當Fragment與Activity發生關聯時調用。
onCreateView(LayoutInflater, ViewGroup,Bundle)
創建該Fragment的視圖
onActivityCreated(Bundle)
當Activity的onCreate方法返回時調用
onDestoryView()
與onCreateView想對應,當該Fragment的視圖被移除時調用
onDetach()
與onAttach相對應,當Fragment與Activity關聯被取消時調用
注意:除了onCreateView,其他的所有方法如果你重寫了,必須調用父類對於該方法的實現
兩種使用方法
1.靜態註冊:
把Fragment 當成一個控件直接在佈局文件中添加
2.動態註冊
動態使用Fragment三步走:
(1)android.app.Fragment 主要用於定義Fragment
Fragment fragment = new Fragment();
(2)android.app.FragmentManager主要用於在Activity中操作Fragment
getFragmentManager() //v4中,getSupportFragmentManager
(3)android.app.FragmentTransaction保證一些列Fragment操作的原子性
FragmentTransaction transaction =fm.benginTransatcion();//開啓一個事務
private void initDefaultFrament() { //獲得一個佈局管理器,主要在Activity中操作Fragment fragmentManager = getSupportFragmentManager(); //開啓一個事務 FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); //給公共容器中添加碎片 fragmentTransaction.add(R.id.GONG,fragmentone); //提交事務 fragmentTransaction.commit(); fragmentnew=fragmentone; }常用邏輯和方法
public void onClick(View v) { FragmentTransaction fragmentTransaction1 = fragmentManager.beginTransaction(); switch (v.getId()){ case R.id.button: if(fragmentone.isAdded()){ fragmentTransaction1.hide(fragmentnew).show(fragmentone).commit(); }else{ //隱藏當前頁面,然後添加新的頁面,提交 fragmentTransaction1.hide(fragmentnew).add(R.id.GONG,fragmentone).commit(); } fragmentnew=fragmentone; break; case R.id.button2: if(fragmenttwo.isAdded()){ fragmentTransaction1.hide(fragmentnew).show(fragmenttwo).commit(); }else{ //隱藏當前頁面,然後添加新的頁面,提交 fragmentTransaction1.hide(fragmentnew).add(R.id.GONG,fragmenttwo).commit(); } fragmentnew=fragmenttwo; break; }