package com.salama.android.webcore;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentTransaction;
import android.util.Log;
public abstract class BaseViewController extends Fragment {
private final static String LOG_TAG = "BaseViewController";
/**
* It could simply be treated as one property in most cases.
* @return
*/
public abstract int getViewContainerId();
/**
* It could simply be treated as one property in most cases.
* @return
*/
public abstract void setViewContainerId(int viewContainerId);
// public abstract int getRootBackStackEntryId();
//
// public abstract void setRootBackStackEntryId(int rootBackStackEntryId);
/**
* It could simply be treated as one property in most cases.
* @return
*/
public abstract int getBackStackEntryId();
/**
* It could simply be treated as one property in most cases.
* @return
*/
public abstract void setBackStackEntryId(int backStackEntryId);
private static int _defaultFragmentPushAnimSlideIn = android.R.anim.slide_in_left;
private static int _defaultFragmentPushAnimSlideOut = android.R.anim.slide_out_right;
public static int getDefaultFragmentPushAnimSlideIn() {
return _defaultFragmentPushAnimSlideIn;
}
public static void setDefaultFragmentPushAnimSlideIn(
int defaultFragmentPushAnimSlideIn) {
_defaultFragmentPushAnimSlideIn = defaultFragmentPushAnimSlideIn;
}
public static int getDefaultFragmentPushAnimSlideOut() {
return _defaultFragmentPushAnimSlideOut;
}
public static void setDefaultFragmentPushAnimSlideOut(
int defaultFragmentPushAnimSlideOut) {
_defaultFragmentPushAnimSlideOut = defaultFragmentPushAnimSlideOut;
}
/**
* push方式显示BaseViewController
* @param viewController 画面
*/
public void pushView(final BaseViewController viewController) {
try {
getActivity().runOnUiThread(new Runnable() {
@Override
public void run() {
try {
if(viewController == null) {
Log.i("BaseViewController", "viewController is null");
}
viewController.setViewContainerId(getViewContainerId());
//viewController.setRootViewControllerId(getRootViewControllerId());
FragmentTransaction trans = getActivity().getSupportFragmentManager().beginTransaction();
trans.setCustomAnimations(
getDefaultFragmentPushAnimSlideIn(),
getDefaultFragmentPushAnimSlideOut());
//trans.add(_viewContainerId, pageView, pageView.getLocalPage());
if(LocalWebViewFragment.class.isAssignableFrom(viewController.getClass())) {
trans.add(getViewContainerId(), viewController, ((LocalWebViewFragment)viewController).getLocalPage());
} else {
trans.add(getViewContainerId(), viewController, viewController.getClass().getName());
}
trans.addToBackStack(null);
int backStackEntryId = trans.commit();
viewController.setBackStackEntryId(backStackEntryId);
} catch(Throwable e) {
Log.e(LOG_TAG, "pushView()", e);
}
}
});
} catch(Throwable e) {
Log.e(LOG_TAG, "pushView()", e);
}
}
/**
* 返回上一个画面
*/
public void popSelf() {
try {
getActivity().runOnUiThread(new Runnable() {
@Override
public void run() {
try {
getActivity().getSupportFragmentManager().popBackStack();
} catch(Throwable e) {
Log.e(LOG_TAG, "popSelf()", e);
}
}
});
} catch(Throwable e) {
Log.e(LOG_TAG, "popSelf()", e);
}
}
/**
* 返回至根画面
*/
public void popToRoot() {
try {
getActivity().runOnUiThread(new Runnable() {
@Override
public void run() {
try {
//getActivity().getSupportFragmentManager().popBackStack(getRootViewControllerId(), 0);
getActivity().getSupportFragmentManager().popBackStack(
getActivity().getSupportFragmentManager().getBackStackEntryAt(0).getId(), 0);
} catch(Throwable e) {
Log.e(LOG_TAG, "popToRoot()", e);
}
}
});
} catch(Throwable e) {
Log.e(LOG_TAG, "popToRoot()", e);
}
}
}