@@ -29,14 +29,14 @@ private FragmentUtils() {
29
29
throw new UnsupportedOperationException ("u can't instantiate me..." );
30
30
}
31
31
32
- private static final int TYPE_ADD_FRAGMENT = 0x01 << 0 ;
32
+ private static final int TYPE_ADD_FRAGMENT = 0x01 ;
33
33
private static final int TYPE_REMOVE_FRAGMENT = 0x01 << 1 ;
34
34
private static final int TYPE_REMOVE_TO_FRAGMENT = 0x01 << 2 ;
35
- private static final int TYPE_REPLACE_FRAGMENT = 0x01 << 4 ;
35
+ private static final int TYPE_REPLACE_FRAGMENT = 0x01 << 3 ;
36
+ private static final int TYPE_POP_ADD_FRAGMENT = 0x01 << 4 ;
36
37
private static final int TYPE_HIDE_FRAGMENT = 0x01 << 5 ;
37
38
private static final int TYPE_SHOW_FRAGMENT = 0x01 << 6 ;
38
39
private static final int TYPE_HIDE_SHOW_FRAGMENT = 0x01 << 7 ;
39
- private static final int TYPE_POP_ADD_FRAGMENT = 0x01 << 8 ;
40
40
41
41
private static final String ARGS_ID = "args_id" ;
42
42
private static final String ARGS_IS_HIDE = "args_is_hide" ;
@@ -110,6 +110,29 @@ public static Fragment addFragment(@NonNull FragmentManager fragmentManager,
110
110
return operateFragment (fragmentManager , null , fragment , TYPE_ADD_FRAGMENT , sharedElement );
111
111
}
112
112
113
+ /**
114
+ * 新增多个fragment
115
+ *
116
+ * @param fragmentManager fragment管理器
117
+ * @param fragments fragments
118
+ * @param showIndex 要显示的fragment索引
119
+ * @param containerId 布局Id
120
+ * @return fragment
121
+ */
122
+ public static Fragment addFragments (@ NonNull FragmentManager fragmentManager ,
123
+ @ NonNull List <Fragment > fragments ,
124
+ int showIndex ,
125
+ int containerId ) {
126
+ for (int i = fragments .size () - 1 ; i >= 0 ; --i ) {
127
+ Fragment fragment = fragments .get (i );
128
+ if (fragment != null ) {
129
+ putArgs (fragment , new Args (containerId , showIndex != i , false ));
130
+ operateFragment (fragmentManager , null , fragment , TYPE_ADD_FRAGMENT );
131
+ }
132
+ }
133
+ return fragments .get (showIndex );
134
+ }
135
+
113
136
/**
114
137
* 移除fragment
115
138
*
@@ -162,7 +185,7 @@ public static void removeAllFragments(@NonNull FragmentManager fragmentManager)
162
185
* @param srcFragment 源fragment
163
186
* @param destFragment 目标fragment
164
187
* @param isAddStack 是否入回退栈
165
- * @return {@code null} 失败
188
+ * @return 目标fragment
166
189
*/
167
190
public static Fragment replaceFragment (@ NonNull Fragment srcFragment ,
168
191
@ NonNull Fragment destFragment ,
@@ -281,6 +304,7 @@ public static Fragment popAddFragment(@NonNull FragmentManager fragmentManager,
281
304
* 隐藏fragment
282
305
*
283
306
* @param fragment fragment
307
+ * @return 隐藏的Fragment
284
308
*/
285
309
public static Fragment hideFragment (@ NonNull Fragment fragment ) {
286
310
Args args = getArgs (fragment );
@@ -290,10 +314,25 @@ public static Fragment hideFragment(@NonNull Fragment fragment) {
290
314
return operateFragment (fragment .getFragmentManager (), null , fragment , TYPE_HIDE_FRAGMENT );
291
315
}
292
316
317
+ /**
318
+ * 隐藏同级别fragment
319
+ *
320
+ * @param fragmentManager fragment管理器
321
+ */
322
+ public static void hideFragments (@ NonNull FragmentManager fragmentManager ) {
323
+ List <Fragment > fragments = getFragments (fragmentManager );
324
+ if (fragments .isEmpty ()) return ;
325
+ for (int i = fragments .size () - 1 ; i >= 0 ; --i ) {
326
+ Fragment fragment = fragments .get (i );
327
+ if (fragment != null ) hideFragment (fragment );
328
+ }
329
+ }
330
+
293
331
/**
294
332
* 显示fragment
295
333
*
296
334
* @param fragment fragment
335
+ * @return show的Fragment
297
336
*/
298
337
public static Fragment showFragment (@ NonNull Fragment fragment ) {
299
338
Args args = getArgs (fragment );
@@ -306,8 +345,9 @@ public static Fragment showFragment(@NonNull Fragment fragment) {
306
345
/**
307
346
* 先隐藏后显示fragment
308
347
*
309
- * @param hideFragment 需要hide的Fragment,如果为null则把栈中的fragment都隐藏
310
- * @param showFragment 需要show的Fragment
348
+ * @param hideFragment 需要隐藏的Fragment
349
+ * @param showFragment 需要显示的Fragment
350
+ * @return 显示的Fragment
311
351
*/
312
352
public static Fragment hideShowFragment (@ NonNull Fragment hideFragment ,
313
353
@ NonNull Fragment showFragment ) {
@@ -401,10 +441,14 @@ private static Fragment operateFragment(@NonNull FragmentManager fragmentManager
401
441
ft .remove (fragment );
402
442
}
403
443
break ;
444
+ case TYPE_REPLACE_FRAGMENT :
445
+ ft .replace (args .getInt (ARGS_ID ), destFragment , name );
446
+ if (args .getBoolean (ARGS_IS_ADD_STACK )) ft .addToBackStack (name );
447
+ break ;
404
448
case TYPE_POP_ADD_FRAGMENT :
405
449
popFragment (fragmentManager );
406
- if (args .getBoolean (ARGS_IS_ADD_STACK )) ft .addToBackStack (name );
407
450
ft .add (args .getInt (ARGS_ID ), destFragment , name );
451
+ if (args .getBoolean (ARGS_IS_ADD_STACK )) ft .addToBackStack (name );
408
452
break ;
409
453
case TYPE_HIDE_FRAGMENT :
410
454
ft .hide (destFragment );
@@ -415,10 +459,6 @@ private static Fragment operateFragment(@NonNull FragmentManager fragmentManager
415
459
case TYPE_HIDE_SHOW_FRAGMENT :
416
460
ft .hide (srcFragment ).show (destFragment );
417
461
break ;
418
- case TYPE_REPLACE_FRAGMENT :
419
- if (args .getBoolean (ARGS_IS_ADD_STACK )) ft .addToBackStack (name );
420
- ft .replace (args .getInt (ARGS_ID ), destFragment , name );
421
- break ;
422
462
}
423
463
ft .commitAllowingStateLoss ();
424
464
return destFragment ;
@@ -451,7 +491,8 @@ public static Fragment getLastAddFragmentInStack(@NonNull FragmentManager fragme
451
491
* @param isInStack 是否是栈中的
452
492
* @return 栈中最后加入的fragment
453
493
*/
454
- private static Fragment getLastAddFragmentIsInStack (@ NonNull FragmentManager fragmentManager , boolean isInStack ) {
494
+ private static Fragment getLastAddFragmentIsInStack (@ NonNull FragmentManager fragmentManager ,
495
+ boolean isInStack ) {
455
496
List <Fragment > fragments = getFragments (fragmentManager );
456
497
if (fragments .isEmpty ()) return null ;
457
498
for (int i = fragments .size () - 1 ; i >= 0 ; --i ) {
0 commit comments