package me.yokeyword.sample.demo_flow.base; import android.os.Bundle; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.support.v7.app.AppCompatActivity; import android.view.MotionEvent; import me.yokeyword.fragmentation.ExtraTransaction; import me.yokeyword.fragmentation.ISupportActivity; import me.yokeyword.fragmentation.ISupportFragment; import me.yokeyword.fragmentation.SupportActivityDelegate; import me.yokeyword.fragmentation.SupportFragment; import me.yokeyword.fragmentation.SupportHelper; import me.yokeyword.fragmentation.anim.FragmentAnimator; /** * 展示自定制的MySupportActivity,不继承SupportActivity * Created by YoKey on 17/6/24. */ public class MySupportActivity extends AppCompatActivity implements ISupportActivity{ final SupportActivityDelegate mDelegate = new SupportActivityDelegate(this); @Override public SupportActivityDelegate getSupportDelegate() { return mDelegate; } /** * Perform some extra transactions. * 额外的事务:自定义Tag,添加SharedElement动画,操作非回退栈Fragment */ @Override public ExtraTransaction extraTransaction() { return mDelegate.extraTransaction(); } @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); mDelegate.onCreate(savedInstanceState); } @Override protected void onPostCreate(@Nullable Bundle savedInstanceState) { super.onPostCreate(savedInstanceState); mDelegate.onPostCreate(savedInstanceState); } @Override protected void onDestroy() { mDelegate.onDestroy(); super.onDestroy(); } /** * Note: return mDelegate.dispatchTouchEvent(ev) || super.dispatchTouchEvent(ev); */ @Override public boolean dispatchTouchEvent(MotionEvent ev) { return mDelegate.dispatchTouchEvent(ev) || super.dispatchTouchEvent(ev); } /** * 不建议复写该方法,请使用 {@link #onBackPressedSupport} 代替 */ @Override final public void onBackPressed() { mDelegate.onBackPressed(); } /** * 该方法回调时机为,Activity回退栈内Fragment的数量 小于等于1 时,默认finish Activity * 请尽量复写该方法,避免复写onBackPress(),以保证SupportFragment内的onBackPressedSupport()回退事件正常执行 */ @Override public void onBackPressedSupport() { mDelegate.onBackPressedSupport(); } /** * 获取设置的全局动画 copy * * @return FragmentAnimator */ @Override public FragmentAnimator getFragmentAnimator() { return mDelegate.getFragmentAnimator(); } /** * Set all fragments animation. * 设置Fragment内的全局动画 */ @Override public void setFragmentAnimator(FragmentAnimator fragmentAnimator) { mDelegate.setFragmentAnimator(fragmentAnimator); } /** * Set all fragments animation. * 构建Fragment转场动画 *
* 如果是在Activity内实现,则构建的是Activity内所有Fragment的转场动画, * 如果是在Fragment内实现,则构建的是该Fragment的转场动画,此时优先级 > Activity的onCreateFragmentAnimator() * * @return FragmentAnimator对象 */ @Override public FragmentAnimator onCreateFragmentAnimator() { return mDelegate.onCreateFragmentAnimator(); } /** * Causes the Runnable r to be added to the action queue. ** The runnable will be run after all the previous action has been run. *
* 前面的事务全部执行后 执行该Action
*/
@Override
public void post(Runnable runnable) {
mDelegate.post(runnable);
}
/****************************************以下为可选方法(Optional methods)******************************************************/
// 选择性拓展其他方法
public void loadRootFragment(int containerId, @NonNull ISupportFragment toFragment) {
mDelegate.loadRootFragment(containerId, toFragment);
}
public void start(ISupportFragment toFragment) {
mDelegate.start(toFragment);
}
/**
* @param launchMode Same as Activity's LaunchMode.
*/
public void start(ISupportFragment toFragment, @ISupportFragment.LaunchMode int launchMode) {
mDelegate.start(toFragment, launchMode);
}
/**
* It is recommended to use {@link SupportFragment#startWithPopTo(ISupportFragment, Class, boolean)}.
*
* @see #popTo(Class, boolean)
* +
* @see #start(ISupportFragment)
*/
public void startWithPopTo(ISupportFragment toFragment, Class> targetFragmentClass, boolean includeTargetFragment) {
mDelegate.startWithPopTo(toFragment, targetFragmentClass, includeTargetFragment);
}
/**
* Pop the fragment.
*/
public void pop() {
mDelegate.pop();
}
/**
* Pop the last fragment transition from the manager's fragment
* back stack.
*/
public void popTo(Class> targetFragmentClass, boolean includeTargetFragment) {
mDelegate.popTo(targetFragmentClass, includeTargetFragment);
}
/**
* If you want to begin another FragmentTransaction immediately after popTo(), use this method.
* 如果你想在出栈后, 立刻进行FragmentTransaction操作,请使用该方法
*/
public void popTo(Class> targetFragmentClass, boolean includeTargetFragment, Runnable afterPopTransactionRunnable) {
mDelegate.popTo(targetFragmentClass, includeTargetFragment, afterPopTransactionRunnable);
}
public void popTo(Class> targetFragmentClass, boolean includeTargetFragment, Runnable afterPopTransactionRunnable, int popAnim) {
mDelegate.popTo(targetFragmentClass, includeTargetFragment, afterPopTransactionRunnable, popAnim);
}
/**
* 得到位于栈顶Fragment
*/
public ISupportFragment getTopFragment() {
return SupportHelper.getTopFragment(getSupportFragmentManager());
}
/**
* 获取栈内的fragment对象
*/
public