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);
}
}
沒有留言:
張貼留言