2015年2月20日 星期五

TransactionHandler //控制fragment畫面切換

package com.lfo.suntone.transaction;

import android.app.Fragment;
import android.app.FragmentManager;
import android.app.FragmentTransaction;
import android.os.Bundle;

import com.lfo.suntone.fragment.MainFragment;
import com.lfo.suntone.constant.ALLFragmentName;
import com.lfo.suntone.utils.Utils;

/**
 * Created by Administrator on 2015/2/16.
 */
public class TransactionHandler {
    //控制fragment畫面切換
    private static TransactionHandler instance = new TransactionHandler();
    protected MainFragment mainFragment;
    protected Boolean isInitial = false;
    protected FragmentManager fragmentManager;


    private SecondFrameLayoutTransaction secondFrameLayoutTransaction;
    private CenterFrameLayoutTransaction centerFrameLayoutTransaction;
    private CategoryFrameLayoutTransation categoryFrameLayoutTransation;

    protected TransactionHandler() {
    }

    public static TransactionHandler getInstance() {
        return instance;
    }

    public void initial(MainFragment mainFragment) {

        if (isInitial == false) {
            this.mainFragment = mainFragment;
            fragmentManager = mainFragment.getChildFragmentManager();
            Utils.log("TransactionHandler initial");
            isInitial = true;

        }
    }

    public CategoryFrameLayoutTransation getCategoryFrameLayoutTransaction() {

        if (isInitial) {
            categoryFrameLayoutTransation = new CategoryFrameLayoutTransation();
            categoryFrameLayoutTransation.initial(mainFragment);
            return categoryFrameLayoutTransation;
        }
        Utils.logE("TransactionHandler not Initial yet");
        return null;
    }

    public SecondFrameLayoutTransaction getSecondFrameLayoutTransaction() {

        if (isInitial) {
            secondFrameLayoutTransaction = new SecondFrameLayoutTransaction();
            secondFrameLayoutTransaction.initial(mainFragment);

            return secondFrameLayoutTransaction;
        }
        Utils.logE("TransactionHandler not Initial yet");
        return null;
    }

    public CenterFrameLayoutTransaction getCenterFrameLayoutTransaction() {

        if (isInitial) {
            centerFrameLayoutTransaction = new CenterFrameLayoutTransaction();
            centerFrameLayoutTransaction.initial(mainFragment);

            return centerFrameLayoutTransaction;
        }
        Utils.logE("TransactionHandler not Initial yet");
        return null;
    }

    protected void hideSecondLayout() {
        mainFragment.hideSecondLayout();
    }

    protected Fragment getFragmentInMainFragment(ALLFragmentName fragmentname) {
        mainFragment.resetBackKeyPressedCount();//轉移頁面時把ackKeyPressedCount歸零
        Fragment fragment = fragmentManager.findFragmentByTag(fragmentname.toString());
        if (fragment == null) {

            return null;
        }
        return fragment;

    }

    protected void passvalueAndCommit(Bundle whatyouwantpass, Fragment result, int layoutId) {
        try {
            if (whatyouwantpass != null) {
                result.setArguments(whatyouwantpass);
            }
            FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
            fragmentTransaction.setTransition(FragmentTransaction.TRANSIT_ENTER_MASK);
            //layoutId=R.id.secondFrameLayout;
            fragmentTransaction.addToBackStack(null);

            fragmentTransaction.replace(layoutId, result, result.getClass().getSimpleName());
            fragmentTransaction.commitAllowingStateLoss();
            //Utils.log("passvalueAndCommit and commit");
        } catch (Exception e) {
            //bug  http://stackoverflow.com/questions/15207305/getting-the-error-java-lang-illegalstateexception-activity-has-been-destroyed
            e.printStackTrace();
        }

    }


}



package com.lfo.suntone.transaction;

import android.app.Fragment;
import android.content.Context;
import android.os.Bundle;

import com.lfo.suntone.R;
import com.lfo.suntone.fragment.CategoryFragment;
import com.lfo.suntone.fragment.news.NewsPageFragment;
import com.lfo.suntone.constant.ALLFragmentName;


public class SecondFrameLayoutTransaction extends TransactionHandler {
    //1.new class and extend TransactionHandler
    //2.define variable layoutid
    //3.create method  where you want to fragment
    //4.add to TransactionHandler


    final private int layoutId = R.id.secondFrameLayout;

    protected SecondFrameLayoutTransaction() {

    }

    public void toNewsPageFragment(Context context,Bundle whatyouwantpass) {
        NewsPageFragment fragment = (NewsPageFragment) getFragmentInMainFragment(ALLFragmentName.NewsPageFragment);
        if (fragment == null) {
            fragment = new NewsPageFragment();
            fragment= (NewsPageFragment) Fragment.instantiate(context,fragment.getClass().getName());
        }
        hideSecondLayout();
        passvalueAndCommit(whatyouwantpass, fragment, layoutId);
    }


    public void toCategoryFragment(Context context,Bundle whatyouwantpass) {
        CategoryFragment fragment = (CategoryFragment) getFragmentInMainFragment(ALLFragmentName.CategoryFragment);
        if (fragment == null) {
            fragment = new CategoryFragment();
            fragment= (CategoryFragment) Fragment.instantiate(context, fragment.getClass().getName());
        }
        hideSecondLayout();
        passvalueAndCommit(whatyouwantpass, fragment, layoutId);
    }


}

沒有留言:

張貼留言