Skip to content

Commit 66399af

Browse files
committed
see 02/16 log
1 parent 4c77e79 commit 66399af

File tree

4 files changed

+68
-14
lines changed

4 files changed

+68
-14
lines changed

README-CN.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -213,6 +213,7 @@ getFileExtension : 根据全路径获取文件拓展名
213213
> - **Fragment相关→[FragmentUtils.java][fragment.java][Demo][fragment.demo]**
214214
```
215215
addFragment : 新增fragment
216+
addFragments : 新增多个fragment
216217
removeFragment : 移除fragment
217218
removeToFragment : 移除到指定fragment
218219
removeFragments : 移除同级别fragment
@@ -224,6 +225,7 @@ popFragments : 出栈同级别fragment
224225
popAllFragments : 出栈所有fragment
225226
popAddFragment : 先出栈后新增fragment
226227
hideFragment : 隐藏fragment
228+
hideFragments : 隐藏同级别fragment
227229
showFragment : 显示fragment
228230
hideShowFragment : 先隐藏后显示fragment
229231
getLastAddFragment : 获取同级别最后加入的fragment

README.md

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -213,6 +213,7 @@ getFileExtension
213213
> - **About Fragment→[FragmentUtils.java][fragment.java][Demo][fragment.demo]**
214214
```
215215
addFragment
216+
addFragments
216217
removeFragment
217218
removeToFragment
218219
removeFragments
@@ -224,17 +225,18 @@ popFragments
224225
popAllFragments
225226
popAddFragment
226227
hideFragment
228+
hideFragments
227229
showFragment
228230
hideShowFragment
229231
getLastAddFragment
230232
getLastAddFragmentInStack
231233
getTopShowFragment
232234
getTopShowFragmentInStack
233-
getPreFragment
234235
getFragments
235236
getFragmentsInStack
236237
getAllFragments
237238
getAllFragmentsInStack
239+
getPreFragment
238240
findFragment
239241
dispatchBackPress
240242
setBackgroundColor

app/src/main/java/com/blankj/androidutilcode/activity/FragmentActivity.java

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,17 @@
22

33
import android.os.Bundle;
44
import android.support.v4.app.Fragment;
5+
import android.support.v4.app.FragmentTransaction;
56
import android.support.v7.app.AppCompatActivity;
67

78
import com.blankj.androidutilcode.R;
89
import com.blankj.androidutilcode.fragment.Demo0Fragment;
10+
import com.blankj.androidutilcode.fragment.Demo1Fragment;
11+
import com.blankj.androidutilcode.fragment.Demo2Fragment;
912
import com.blankj.utilcode.utils.FragmentUtils;
1013

14+
import java.util.ArrayList;
15+
1116
/**
1217
* <pre>
1318
* author: Blankj
@@ -24,7 +29,11 @@ public class FragmentActivity extends AppCompatActivity {
2429
protected void onCreate(Bundle savedInstanceState) {
2530
super.onCreate(savedInstanceState);
2631
setContentView(R.layout.activity_fragment);
27-
rootFragment = FragmentUtils.addFragment(getSupportFragmentManager(), Demo0Fragment.newInstance(), R.id.fragment_container);
32+
ArrayList<Fragment> fragments = new ArrayList<>();
33+
fragments.add(Demo0Fragment.newInstance());
34+
fragments.add(Demo1Fragment.newInstance());
35+
fragments.add(Demo2Fragment.newInstance());
36+
rootFragment = FragmentUtils.addFragments(getSupportFragmentManager(), fragments, 0, R.id.fragment_container);
2837
}
2938

3039

utilcode/src/main/java/com/blankj/utilcode/utils/FragmentUtils.java

Lines changed: 53 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -29,14 +29,14 @@ private FragmentUtils() {
2929
throw new UnsupportedOperationException("u can't instantiate me...");
3030
}
3131

32-
private static final int TYPE_ADD_FRAGMENT = 0x01 << 0;
32+
private static final int TYPE_ADD_FRAGMENT = 0x01;
3333
private static final int TYPE_REMOVE_FRAGMENT = 0x01 << 1;
3434
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;
3637
private static final int TYPE_HIDE_FRAGMENT = 0x01 << 5;
3738
private static final int TYPE_SHOW_FRAGMENT = 0x01 << 6;
3839
private static final int TYPE_HIDE_SHOW_FRAGMENT = 0x01 << 7;
39-
private static final int TYPE_POP_ADD_FRAGMENT = 0x01 << 8;
4040

4141
private static final String ARGS_ID = "args_id";
4242
private static final String ARGS_IS_HIDE = "args_is_hide";
@@ -110,6 +110,29 @@ public static Fragment addFragment(@NonNull FragmentManager fragmentManager,
110110
return operateFragment(fragmentManager, null, fragment, TYPE_ADD_FRAGMENT, sharedElement);
111111
}
112112

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+
113136
/**
114137
* 移除fragment
115138
*
@@ -162,7 +185,7 @@ public static void removeAllFragments(@NonNull FragmentManager fragmentManager)
162185
* @param srcFragment 源fragment
163186
* @param destFragment 目标fragment
164187
* @param isAddStack 是否入回退栈
165-
* @return {@code null} 失败
188+
* @return 目标fragment
166189
*/
167190
public static Fragment replaceFragment(@NonNull Fragment srcFragment,
168191
@NonNull Fragment destFragment,
@@ -281,6 +304,7 @@ public static Fragment popAddFragment(@NonNull FragmentManager fragmentManager,
281304
* 隐藏fragment
282305
*
283306
* @param fragment fragment
307+
* @return 隐藏的Fragment
284308
*/
285309
public static Fragment hideFragment(@NonNull Fragment fragment) {
286310
Args args = getArgs(fragment);
@@ -290,10 +314,25 @@ public static Fragment hideFragment(@NonNull Fragment fragment) {
290314
return operateFragment(fragment.getFragmentManager(), null, fragment, TYPE_HIDE_FRAGMENT);
291315
}
292316

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+
293331
/**
294332
* 显示fragment
295333
*
296334
* @param fragment fragment
335+
* @return show的Fragment
297336
*/
298337
public static Fragment showFragment(@NonNull Fragment fragment) {
299338
Args args = getArgs(fragment);
@@ -306,8 +345,9 @@ public static Fragment showFragment(@NonNull Fragment fragment) {
306345
/**
307346
* 先隐藏后显示fragment
308347
*
309-
* @param hideFragment 需要hide的Fragment,如果为null则把栈中的fragment都隐藏
310-
* @param showFragment 需要show的Fragment
348+
* @param hideFragment 需要隐藏的Fragment
349+
* @param showFragment 需要显示的Fragment
350+
* @return 显示的Fragment
311351
*/
312352
public static Fragment hideShowFragment(@NonNull Fragment hideFragment,
313353
@NonNull Fragment showFragment) {
@@ -401,10 +441,14 @@ private static Fragment operateFragment(@NonNull FragmentManager fragmentManager
401441
ft.remove(fragment);
402442
}
403443
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;
404448
case TYPE_POP_ADD_FRAGMENT:
405449
popFragment(fragmentManager);
406-
if (args.getBoolean(ARGS_IS_ADD_STACK)) ft.addToBackStack(name);
407450
ft.add(args.getInt(ARGS_ID), destFragment, name);
451+
if (args.getBoolean(ARGS_IS_ADD_STACK)) ft.addToBackStack(name);
408452
break;
409453
case TYPE_HIDE_FRAGMENT:
410454
ft.hide(destFragment);
@@ -415,10 +459,6 @@ private static Fragment operateFragment(@NonNull FragmentManager fragmentManager
415459
case TYPE_HIDE_SHOW_FRAGMENT:
416460
ft.hide(srcFragment).show(destFragment);
417461
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;
422462
}
423463
ft.commitAllowingStateLoss();
424464
return destFragment;
@@ -451,7 +491,8 @@ public static Fragment getLastAddFragmentInStack(@NonNull FragmentManager fragme
451491
* @param isInStack 是否是栈中的
452492
* @return 栈中最后加入的fragment
453493
*/
454-
private static Fragment getLastAddFragmentIsInStack(@NonNull FragmentManager fragmentManager, boolean isInStack) {
494+
private static Fragment getLastAddFragmentIsInStack(@NonNull FragmentManager fragmentManager,
495+
boolean isInStack) {
455496
List<Fragment> fragments = getFragments(fragmentManager);
456497
if (fragments.isEmpty()) return null;
457498
for (int i = fragments.size() - 1; i >= 0; --i) {

0 commit comments

Comments
 (0)