diff --git a/baseframework/src/main/java/com/kongzue/baseframework/BaseActivity.java b/baseframework/src/main/java/com/kongzue/baseframework/BaseActivity.java index a10a785..57d8b2b 100644 --- a/baseframework/src/main/java/com/kongzue/baseframework/BaseActivity.java +++ b/baseframework/src/main/java/com/kongzue/baseframework/BaseActivity.java @@ -1320,7 +1320,7 @@ public void jumpAnim(int enterAnim, int exitAnim) { public void jumpAnim(int enterAnim, int exitAnim, boolean isExit) { int version = Integer.valueOf(Build.VERSION.SDK_INT); if (version > 5) { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.UPSIDE_DOWN_CAKE) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.UPSIDE_DOWN_CAKE && BaseFrameworkSettings.supportOverrideActivityTransition) { overrideActivityTransition(isExit ? OVERRIDE_TRANSITION_CLOSE : OVERRIDE_TRANSITION_OPEN, enterAnim, exitAnim); } else { overridePendingTransition(enterAnim, exitAnim); diff --git a/baseframework/src/main/java/com/kongzue/baseframework/BaseFrameworkSettings.java b/baseframework/src/main/java/com/kongzue/baseframework/BaseFrameworkSettings.java index 4ddf83c..11d6f6b 100644 --- a/baseframework/src/main/java/com/kongzue/baseframework/BaseFrameworkSettings.java +++ b/baseframework/src/main/java/com/kongzue/baseframework/BaseFrameworkSettings.java @@ -22,7 +22,7 @@ * CreateTime: 2018/9/30 03:22 */ public class BaseFrameworkSettings { - + private static OnBugReportListener onBugReportListener; //是否开启debug模式,此开关影响打印Log日志等行为 @@ -202,4 +202,7 @@ private static String createDeviceId() { //使用DataBinding @Deprecated public static boolean useDataBinding = false; + + //使用overrideActivityTransition而不是overridePendingTransition,警告,该 API 在某些情况下不生效,原因不明 + public static boolean supportOverrideActivityTransition=false; } \ No newline at end of file diff --git a/baseframework/src/main/java/com/kongzue/baseframework/util/FragmentChangeUtil.java b/baseframework/src/main/java/com/kongzue/baseframework/util/FragmentChangeUtil.java index 32a8b72..2c283ab 100644 --- a/baseframework/src/main/java/com/kongzue/baseframework/util/FragmentChangeUtil.java +++ b/baseframework/src/main/java/com/kongzue/baseframework/util/FragmentChangeUtil.java @@ -27,24 +27,24 @@ * CreateTime: 2019/2/20 18:17 */ public class FragmentChangeUtil { - + private OnFragmentChangeListener onFragmentChangeListener; - + private BaseActivity me; private List fragmentList; private BaseFragment focusFragment; private int enterAnimResId; private int exitAnimResId; - + private int frameLayoutResId; private View containerView; - + private PagerAdapter fragmentPagerAdapter; - + public FragmentChangeUtil(BaseActivity me, int frameLayoutResId) { build(me, frameLayoutResId); } - + public FragmentChangeUtil build(BaseActivity me, int frameLayoutResId) { this.me = me; this.frameLayoutResId = frameLayoutResId; @@ -52,16 +52,16 @@ public FragmentChangeUtil build(BaseActivity me, int frameLayoutResId) { fragmentList = new ArrayList<>(); return this; } - + public PagerAdapter getFragmentPagerAdapter() { return fragmentPagerAdapter; } - + public FragmentChangeUtil addFragment(BaseFragment fragment) { addFragment(fragment, true); return this; } - + public FragmentChangeUtil addFragment(BaseFragment fragment, boolean isPreload) { if (me == null || frameLayoutResId == 0 || fragmentList == null) { log("错误:请先执行 build(...) 方法初始化 FragmentChangeUtil"); @@ -84,7 +84,7 @@ public FragmentChangeUtil addFragment(BaseFragment fragment, boolean isPreload) } else { fragmentPagerAdapter.notifyDataSetChanged(); } - viewPager.addOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener(){ + viewPager.addOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() { @Override public void onPageSelected(int position) { if (focusFragment != null) { @@ -100,12 +100,12 @@ public void onPageSelected(int position) { } return this; } - + public FragmentChangeUtil show(BaseFragment fragment) { show(fragment, true); return this; } - + public FragmentChangeUtil show(BaseFragment fragment, boolean autoHideOldFragment) { if (me == null || frameLayoutResId == 0 || fragmentList == null) { log("错误:请先执行build(...)方法初始化FragmentChangeUtil"); @@ -122,12 +122,12 @@ public FragmentChangeUtil show(BaseFragment fragment, boolean autoHideOldFragmen enterAnimResId = 0; exitAnimResId = 0; } - + if (autoHideOldFragment && focusFragment != null) { focusFragment.onHide(); transaction.hide(focusFragment); } - + if (!fragment.isAddedCompat()) { transaction.add(frameLayoutResId, fragment); } else { @@ -151,12 +151,12 @@ public FragmentChangeUtil show(BaseFragment fragment, boolean autoHideOldFragmen } return this; } - + public FragmentChangeUtil show(int index) { show(index, true); return this; } - + public FragmentChangeUtil show(int index, boolean autoHideOldFragment) { if (me == null || frameLayoutResId == 0 || fragmentList == null) { log("错误:请先执行build(...)方法初始化FragmentChangeUtil"); @@ -169,12 +169,12 @@ public FragmentChangeUtil show(int index, boolean autoHideOldFragment) { enterAnimResId = 0; exitAnimResId = 0; } - + if (autoHideOldFragment && focusFragment != null) { focusFragment.onHide(); transaction.hide(focusFragment); } - + if (!fragmentList.get(index).isAddedCompat()) { transaction.add(frameLayoutResId, fragmentList.get(index)); } else { @@ -183,7 +183,7 @@ public FragmentChangeUtil show(int index, boolean autoHideOldFragment) { } transaction.show(fragmentList.get(index)); } - + transaction.commit(); fragmentList.get(index).callShow(); focusFragment = fragmentList.get(index); @@ -199,7 +199,7 @@ public FragmentChangeUtil show(int index, boolean autoHideOldFragment) { } return this; } - + public FragmentChangeUtil hide(int index) { if (me == null || frameLayoutResId == 0 || fragmentList == null) { log("错误:请先执行build(...)方法初始化FragmentChangeUtil"); @@ -212,13 +212,13 @@ public FragmentChangeUtil hide(int index) { enterAnimResId = 0; exitAnimResId = 0; } - + if (!fragmentList.get(index).isAddedCompat()) { transaction.add(frameLayoutResId, fragmentList.get(index)); } fragmentList.get(index).onHide(); transaction.hide(fragmentList.get(index)); - + transaction.commit(); } if (containerView instanceof ViewPager) { @@ -227,7 +227,7 @@ public FragmentChangeUtil hide(int index) { } return this; } - + public FragmentChangeUtil hideNow() { if (me == null || frameLayoutResId == 0 || fragmentList == null) { log("错误:请先执行build(...)方法初始化FragmentChangeUtil"); @@ -240,10 +240,10 @@ public FragmentChangeUtil hideNow() { enterAnimResId = 0; exitAnimResId = 0; } - + focusFragment.onHide(); transaction.hide(focusFragment); - + transaction.commit(); } if (containerView instanceof ViewPager) { @@ -252,7 +252,7 @@ public FragmentChangeUtil hideNow() { } return this; } - + public FragmentChangeUtil hide(BaseFragment fragment) { if (me == null || frameLayoutResId == 0 || fragmentList == null) { log("错误:请先执行build(...)方法初始化FragmentChangeUtil"); @@ -265,13 +265,13 @@ public FragmentChangeUtil hide(BaseFragment fragment) { enterAnimResId = 0; exitAnimResId = 0; } - + if (!fragment.isAddedCompat()) { transaction.add(frameLayoutResId, fragment); } fragment.onHide(); transaction.hide(fragment); - + transaction.commit(); } if (containerView instanceof ViewPager) { @@ -285,7 +285,7 @@ public FragmentChangeUtil remove(int fragmentIndex) { remove(getFragment(fragmentIndex)); return this; } - + public FragmentChangeUtil remove(BaseFragment fragment) { if (me == null || frameLayoutResId == 0 || fragmentList == null) { log("错误:请先执行build(...)方法初始化FragmentChangeUtil"); @@ -298,22 +298,25 @@ public FragmentChangeUtil remove(BaseFragment fragment) { enterAnimResId = 0; exitAnimResId = 0; } - + if (fragment.isAddedCompat()) { transaction.remove(fragment); } fragment.setAdded(false); fragmentList.remove(fragment); - + transaction.commit(); } if (containerView instanceof ViewPager) { fragmentList.remove(fragment); fragmentPagerAdapter.notifyDataSetChanged(); + if (focusFragment == fragment) { + focusFragment = fragmentList.get(((ViewPager) containerView).getCurrentItem()); + } } return this; } - + public int getCount() { if (fragmentList == null) { log("错误:请先执行build(...)方法初始化FragmentChangeUtil"); @@ -321,16 +324,16 @@ public int getCount() { } return fragmentList.size(); } - + public B getFocusFragment() { return (B) focusFragment; } - + public FragmentChangeUtil setFocusFragment(BaseFragment fragment) { focusFragment = fragment; return this; } - + public int getFocusFragmentIndex() { if (fragmentList == null) { log("错误:请先执行build(...)方法初始化FragmentChangeUtil"); @@ -338,7 +341,7 @@ public int getFocusFragmentIndex() { } return fragmentList.indexOf(focusFragment); } - + //简易Log public void log(final Object obj) { try { @@ -353,7 +356,7 @@ public void log(final Object obj) { e.printStackTrace(); } } - + public B getFragment(int index) { if (me == null || frameLayoutResId == 0 || fragmentList == null) { log("错误:请先执行build(...)方法初始化FragmentChangeUtil"); @@ -363,9 +366,9 @@ public B getFragment(int index) { log("错误:要获取的 index=" + index + " 超出了已添加的列表范围:" + fragmentList.size()); return null; } - return (B)fragmentList.get(index); + return (B) fragmentList.get(index); } - + public B getFragment(String instanceKey) { if (me == null || frameLayoutResId == 0 || fragmentList == null) { log("错误:请先执行build(...)方法初始化FragmentChangeUtil"); @@ -373,12 +376,12 @@ public B getFragment(String instanceKey) { } for (BaseFragment fragment : fragmentList) { if (fragment.getInstanceKey().equals(instanceKey)) { - return (B)fragment; + return (B) fragment; } } return null; } - + public B getFragment(Class c) { if (me == null || frameLayoutResId == 0 || fragmentList == null) { log("错误:请先执行build(...)方法初始化FragmentChangeUtil"); @@ -386,21 +389,21 @@ public B getFragment(Class c) { } for (BaseFragment b : fragmentList) { if (b.getClass().equals(c)) { - return (B)b; + return (B) b; } } return null; } - + public OnFragmentChangeListener getOnFragmentChangeListener() { return onFragmentChangeListener; } - + public FragmentChangeUtil setOnFragmentChangeListener(OnFragmentChangeListener onFragmentChangeListener) { this.onFragmentChangeListener = onFragmentChangeListener; return this; } - + public int size() { if (fragmentList == null) { log("错误:请先执行build(...)方法初始化FragmentChangeUtil"); @@ -408,7 +411,7 @@ public int size() { } return fragmentList.size(); } - + public FragmentChangeUtil anim(int enterAnimResId, int exitAnimResId) { this.enterAnimResId = enterAnimResId; this.exitAnimResId = exitAnimResId;