Fragment事務及Fragment實現選項卡功能

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);
        }

    }

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