Fragment的使用

Fragment的使用總結

簡述:

Fragment是在Android3.0 (API level 11)開始引入新的API技術。
爲了提高代碼重用性和改善用戶體驗,我們將Activity中的UI組件進行分組和模塊化管理。這些分組後的UI組件就是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;
    }
transaction.add()  //往Activity中添加一個Fragment
transaction.remove() //刪除
transaction.replace() //替換
transaction.hide() //隱藏當前的Fragment,僅僅是設爲不可見,並不會銷燬
transaction.show() //顯示之前隱藏的Fragment
detach() //會將view從UI中移除,和remove()不同,此時fragment的狀態依然由FragmentManager維護。
lattach() //重建view視圖,附加到UI上並顯示。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章