@@ -81,6 +81,9 @@ public static void startActivity(@NonNull final Class<?> clz,
8181 Context context = getActivityOrApp ();
8282 startActivity (context , null , context .getPackageName (), clz .getName (),
8383 getOptionsBundle (context , enterAnim , exitAnim ));
84+ if (Build .VERSION .SDK_INT < Build .VERSION_CODES .JELLY_BEAN && context instanceof Activity ) {
85+ ((Activity ) context ).overridePendingTransition (enterAnim , exitAnim );
86+ }
8487 }
8588
8689 /**
@@ -182,6 +185,9 @@ public static void startActivity(@NonNull final Bundle extras,
182185 Context context = getActivityOrApp ();
183186 startActivity (context , extras , context .getPackageName (), clz .getName (),
184187 getOptionsBundle (context , enterAnim , exitAnim ));
188+ if (Build .VERSION .SDK_INT < Build .VERSION_CODES .JELLY_BEAN && context instanceof Activity ) {
189+ ((Activity ) context ).overridePendingTransition (enterAnim , exitAnim );
190+ }
185191 }
186192
187193 /**
@@ -287,6 +293,9 @@ public static void startActivity(@NonNull final String pkg,
287293 @ AnimRes final int exitAnim ) {
288294 Context context = getActivityOrApp ();
289295 startActivity (context , null , pkg , cls , getOptionsBundle (context , enterAnim , exitAnim ));
296+ if (Build .VERSION .SDK_INT < Build .VERSION_CODES .JELLY_BEAN && context instanceof Activity ) {
297+ ((Activity ) context ).overridePendingTransition (enterAnim , exitAnim );
298+ }
290299 }
291300
292301 /**
@@ -396,6 +405,9 @@ public static void startActivity(@NonNull final Bundle extras,
396405 @ AnimRes final int exitAnim ) {
397406 Context context = getActivityOrApp ();
398407 startActivity (context , extras , pkg , cls , getOptionsBundle (context , enterAnim , exitAnim ));
408+ if (Build .VERSION .SDK_INT < Build .VERSION_CODES .JELLY_BEAN && context instanceof Activity ) {
409+ ((Activity ) context ).overridePendingTransition (enterAnim , exitAnim );
410+ }
399411 }
400412
401413 /**
@@ -500,6 +512,9 @@ public static void startActivity(@NonNull final Intent intent,
500512 @ AnimRes final int exitAnim ) {
501513 Context context = getActivityOrApp ();
502514 startActivity (intent , context , getOptionsBundle (context , enterAnim , exitAnim ));
515+ if (Build .VERSION .SDK_INT < Build .VERSION_CODES .JELLY_BEAN && context instanceof Activity ) {
516+ ((Activity ) context ).overridePendingTransition (enterAnim , exitAnim );
517+ }
503518 }
504519
505520 /**
@@ -589,6 +604,9 @@ public static void startActivities(@NonNull final Intent[] intents,
589604 @ AnimRes final int exitAnim ) {
590605 Context context = getActivityOrApp ();
591606 startActivities (intents , context , getOptionsBundle (context , enterAnim , exitAnim ));
607+ if (Build .VERSION .SDK_INT < Build .VERSION_CODES .JELLY_BEAN && context instanceof Activity ) {
608+ ((Activity ) context ).overridePendingTransition (enterAnim , exitAnim );
609+ }
592610 }
593611
594612 /**
@@ -751,6 +769,20 @@ public static void finishActivity(@NonNull final Activity activity, final boolea
751769 }
752770 }
753771
772+ /**
773+ * 结束Activity
774+ *
775+ * @param activity activity
776+ * @param enterAnim 入场动画
777+ * @param exitAnim 出场动画
778+ */
779+ public static void finishActivity (@ NonNull final Activity activity ,
780+ @ AnimRes final int enterAnim ,
781+ @ AnimRes final int exitAnim ) {
782+ activity .finish ();
783+ activity .overridePendingTransition (enterAnim , exitAnim );
784+ }
785+
754786 /**
755787 * 结束Activity
756788 *
@@ -778,6 +810,25 @@ public static void finishActivity(@NonNull final Class<?> clz, final boolean isL
778810 }
779811 }
780812
813+ /**
814+ * 结束Activity
815+ *
816+ * @param clz activity类
817+ * @param enterAnim 入场动画
818+ * @param exitAnim 出场动画
819+ */
820+ public static void finishActivity (@ NonNull final Class <?> clz ,
821+ @ AnimRes final int enterAnim ,
822+ @ AnimRes final int exitAnim ) {
823+ List <Activity > activities = Utils .sActivityList ;
824+ for (Activity activity : activities ) {
825+ if (activity .getClass ().equals (clz )) {
826+ activity .finish ();
827+ activity .overridePendingTransition (enterAnim , exitAnim );
828+ }
829+ }
830+ }
831+
781832 /**
782833 * 结束到指定Activity
783834 *
@@ -813,6 +864,32 @@ public static boolean finishToActivity(@NonNull final Activity activity,
813864 return false ;
814865 }
815866
867+ /**
868+ * 结束到指定Activity
869+ *
870+ * @param activity activity
871+ * @param isIncludeSelf 是否结束该activity自己
872+ * @param enterAnim 入场动画
873+ * @param exitAnim 出场动画
874+ */
875+ public static boolean finishToActivity (@ NonNull final Activity activity ,
876+ final boolean isIncludeSelf ,
877+ @ AnimRes final int enterAnim ,
878+ @ AnimRes final int exitAnim ) {
879+ List <Activity > activities = Utils .sActivityList ;
880+ for (int i = activities .size () - 1 ; i >= 0 ; --i ) {
881+ Activity aActivity = activities .get (i );
882+ if (aActivity .equals (activity )) {
883+ if (isIncludeSelf ) {
884+ finishActivity (aActivity , enterAnim , exitAnim );
885+ }
886+ return true ;
887+ }
888+ finishActivity (aActivity , enterAnim , exitAnim );
889+ }
890+ return false ;
891+ }
892+
816893 /**
817894 * 结束到指定Activity
818895 *
@@ -848,6 +925,32 @@ public static boolean finishToActivity(@NonNull final Class<?> clz,
848925 return false ;
849926 }
850927
928+ /**
929+ * 结束到指定Activity
930+ *
931+ * @param clz activity类
932+ * @param isIncludeSelf 是否结束该activity自己
933+ * @param enterAnim 入场动画
934+ * @param exitAnim 出场动画
935+ */
936+ public static boolean finishToActivity (@ NonNull final Class <?> clz ,
937+ final boolean isIncludeSelf ,
938+ @ AnimRes final int enterAnim ,
939+ @ AnimRes final int exitAnim ) {
940+ List <Activity > activities = Utils .sActivityList ;
941+ for (int i = activities .size () - 1 ; i >= 0 ; --i ) {
942+ Activity aActivity = activities .get (i );
943+ if (aActivity .getClass ().equals (clz )) {
944+ if (isIncludeSelf ) {
945+ finishActivity (aActivity , enterAnim , exitAnim );
946+ }
947+ return true ;
948+ }
949+ finishActivity (aActivity , enterAnim , exitAnim );
950+ }
951+ return false ;
952+ }
953+
851954 /**
852955 * 结束除最新之外的同类型Activity
853956 * <p>也就是让栈中最多只剩下一种类型的Activity</p>
@@ -881,6 +984,31 @@ public static void finishOtherActivitiesExceptNewest(@NonNull final Class<?> clz
881984 }
882985 }
883986
987+ /**
988+ * 结束除最新之外的同类型Activity
989+ * <p>也就是让栈中最多只剩下一种类型的Activity</p>
990+ *
991+ * @param clz activity类
992+ * @param enterAnim 入场动画
993+ * @param exitAnim 出场动画
994+ */
995+ public static void finishOtherActivitiesExceptNewest (@ NonNull final Class <?> clz ,
996+ @ AnimRes final int enterAnim ,
997+ @ AnimRes final int exitAnim ) {
998+ List <Activity > activities = Utils .sActivityList ;
999+ boolean flag = false ;
1000+ for (int i = activities .size () - 1 ; i >= 0 ; i --) {
1001+ Activity activity = activities .get (i );
1002+ if (activity .getClass ().equals (clz )) {
1003+ if (flag ) {
1004+ finishActivity (activity , enterAnim , exitAnim );
1005+ } else {
1006+ flag = true ;
1007+ }
1008+ }
1009+ }
1010+ }
1011+
8841012 /**
8851013 * 结束所有activity
8861014 */
@@ -904,6 +1032,21 @@ public static void finishAllActivities(final boolean isLoadAnim) {
9041032 }
9051033 }
9061034
1035+ /**
1036+ * 结束所有activity
1037+ *
1038+ * @param enterAnim 入场动画
1039+ * @param exitAnim 出场动画
1040+ */
1041+ public static void finishAllActivities (@ AnimRes final int enterAnim , @ AnimRes final int exitAnim ) {
1042+ List <Activity > activityList = Utils .sActivityList ;
1043+ for (int i = activityList .size () - 1 ; i >= 0 ; --i ) {// 从栈顶开始移除
1044+ Activity activity = activityList .get (i );
1045+ activity .finish ();// 在onActivityDestroyed发生remove
1046+ activity .overridePendingTransition (enterAnim , exitAnim );
1047+ }
1048+ }
1049+
9071050 private static Context getActivityOrApp () {
9081051 Activity topActivity = getTopActivity ();
9091052 return topActivity == null ? Utils .getApp () : topActivity ;
0 commit comments