Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
xiaoxuan_i809
AndroidUtilCode
提交
444ff24b
A
AndroidUtilCode
项目概览
xiaoxuan_i809
/
AndroidUtilCode
与 Fork 源项目一致
从无法访问的项目Fork
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
A
AndroidUtilCode
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
444ff24b
编写于
2月 14, 2017
作者:
B
Blankj
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
see 02/14 log
上级
dfcdd03b
变更
7
隐藏空白更改
内联
并排
Showing
7 changed file
with
256 addition
and
116 deletion
+256
-116
README-CN.md
README-CN.md
+9
-2
README.md
README.md
+8
-1
app/src/main/java/com/blankj/androidutilcode/fragment/Demo0Fragment.java
...va/com/blankj/androidutilcode/fragment/Demo0Fragment.java
+8
-6
app/src/main/java/com/blankj/androidutilcode/fragment/Demo1Fragment.java
...va/com/blankj/androidutilcode/fragment/Demo1Fragment.java
+6
-4
app/src/main/java/com/blankj/androidutilcode/fragment/Demo2Fragment.java
...va/com/blankj/androidutilcode/fragment/Demo2Fragment.java
+6
-4
app/src/main/java/com/blankj/androidutilcode/fragment/Demo3Fragment.java
...va/com/blankj/androidutilcode/fragment/Demo3Fragment.java
+9
-4
utilcode/src/main/java/com/blankj/utilcode/utils/FragmentUtils.java
...rc/main/java/com/blankj/utilcode/utils/FragmentUtils.java
+210
-95
未找到文件。
README-CN.md
浏览文件 @
444ff24b
...
...
@@ -214,9 +214,14 @@ getFileExtension : 根据全路径获取文件拓展名
```
addFragment : 新增fragment
removeFragment : 移除fragment
removeToFragment : 移除到指定fragment
removeFragments : 移除同级别fragment
removeAllFragments : 移除所有fragment
replaceFragment : 替换fragment
popFragment : 出栈fragment
popToFragment : 出栈到指定fragment
popFragments : 出栈同级别fragment
popAllFragments : 出栈所有fragment
popAddFragment : 先出栈后新增fragment
hideFragment : 隐藏fragment
showFragment : 显示fragment
...
...
@@ -225,11 +230,13 @@ getLastAddFragment : 获取最后加入的fragment
getLastAddFragmentInStack: 获取栈中最后加入的fragment
getTopShowFragment : 获取顶层可见fragment
getTopShowFragmentInStack: 获取栈中顶层可见fragment
findFragment : 查找fragment
getPreFragment : 获取目标fragment的前一个fragment
getFragments : 获取同级别的fragment
getFragments : 获取同级别fragment
getFragmentsInStack : 获取栈中同级别fragment
getAllFragments : 获取所有fragment
getAllFragmentsInStack : 获取栈中所有fragment
findFragment : 查找fragment
dispatchBackPress : 处理fragment回退键
setBackgroundColor : 设置背景色
setBackgroundResource : 设置背景资源
setBackground : 设置背景
...
...
README.md
浏览文件 @
444ff24b
...
...
@@ -214,9 +214,14 @@ getFileExtension
```
addFragment
removeFragment
removeToFragment
removeFragments
removeAllFragments
replaceFragment
popFragment
popToFragment
popFragments
popAllFragments
popAddFragment
hideFragment
showFragment
...
...
@@ -225,11 +230,13 @@ getLastAddFragment
getLastAddFragmentInStack
getTopShowFragment
getTopShowFragmentInStack
findFragment
getPreFragment
getFragments
getFragmentsInStack
getAllFragments
getAllFragmentsInStack
findFragment
dispatchBackPress
setBackgroundColor
setBackgroundResource
setBackground
...
...
app/src/main/java/com/blankj/androidutilcode/fragment/Demo0Fragment.java
浏览文件 @
444ff24b
...
...
@@ -27,7 +27,7 @@ import java.util.Random;
* </pre>
*/
public
class
Demo0Fragment
extends
Fragment
implements
View
.
OnClickListener
,
FragmentUtils
.
OnBackClickListener
{
implements
View
.
OnClickListener
,
FragmentUtils
.
OnBackClickListener
{
private
Fragment
fragment1
;
...
...
@@ -75,14 +75,16 @@ public class Demo0Fragment extends Fragment
tvAboutFragment
.
setText
(
""
);
switch
(
view
.
getId
())
{
case
R
.
id
.
btn_show_about_fragment
:
tvAboutFragment
.
setText
(
"---all fragments---\n"
tvAboutFragment
.
setText
(
"lastAdd: "
+
FragmentUtils
.
getLastAddFragment
(
getFragmentManager
()).
getClass
().
getSimpleName
()
+
"\nlastAddInStack: "
+
(
FragmentUtils
.
getLastAddFragmentInStack
(
getFragmentManager
())
!=
null
?
FragmentUtils
.
getLastAddFragmentInStack
(
getFragmentManager
()).
getClass
().
getSimpleName
()
:
"null"
)
+
"\ntopShow: "
+
FragmentUtils
.
getTopShowFragment
(
getFragmentManager
()).
getClass
().
getSimpleName
()
+
"\ntopShowInStack: "
+
(
FragmentUtils
.
getTopShowFragmentInStack
(
getFragmentManager
())
!=
null
?
FragmentUtils
.
getTopShowFragmentInStack
(
getFragmentManager
()).
getClass
().
getSimpleName
()
:
"null"
)
+
"\n---all of fragments---\n"
+
FragmentUtils
.
getAllFragments
(
getFragmentManager
()).
toString
()
+
"\n-------------------\n\n"
+
"\n-------------------
---
\n\n"
+
"---stack top---\n"
+
FragmentUtils
.
getAllFragmentsInStack
(
getFragmentManager
()).
toString
()
+
"\n---stack bottom---\n\n"
+
"\ntopFragment: "
+
FragmentUtils
.
getLastAddFragment
(
getFragmentManager
()).
getClass
().
getSimpleName
()
+
"\ntopShowFragment: "
+
FragmentUtils
.
getTopShowFragment
(
getFragmentManager
()).
getClass
().
getSimpleName
()
);
break
;
case
R
.
id
.
btn_add_hide
:
...
...
@@ -117,7 +119,7 @@ public class Demo0Fragment extends Fragment
@Override
public
boolean
onBackClick
()
{
FragmentUtils
.
popToFragment
(
getFragmentManager
(),
Demo1Fragment
.
class
,
true
);
//
FragmentUtils.popToFragment(getFragmentManager(), Demo1Fragment.class, true);
return
false
;
}
}
app/src/main/java/com/blankj/androidutilcode/fragment/Demo1Fragment.java
浏览文件 @
444ff24b
...
...
@@ -62,14 +62,16 @@ public class Demo1Fragment extends Fragment
tvAboutFragment
.
setText
(
""
);
switch
(
view
.
getId
())
{
case
R
.
id
.
btn_show_about_fragment
:
tvAboutFragment
.
setText
(
"---all fragments---\n"
tvAboutFragment
.
setText
(
"lastAdd: "
+
FragmentUtils
.
getLastAddFragment
(
getFragmentManager
()).
getClass
().
getSimpleName
()
+
"\nlastAddInStack: "
+
(
FragmentUtils
.
getLastAddFragmentInStack
(
getFragmentManager
())
!=
null
?
FragmentUtils
.
getLastAddFragmentInStack
(
getFragmentManager
()).
getClass
().
getSimpleName
()
:
"null"
)
+
"\ntopShow: "
+
FragmentUtils
.
getTopShowFragment
(
getFragmentManager
()).
getClass
().
getSimpleName
()
+
"\ntopShowInStack: "
+
(
FragmentUtils
.
getTopShowFragmentInStack
(
getFragmentManager
())
!=
null
?
FragmentUtils
.
getTopShowFragmentInStack
(
getFragmentManager
()).
getClass
().
getSimpleName
()
:
"null"
)
+
"\n---all of fragments---\n"
+
FragmentUtils
.
getAllFragments
(
getFragmentManager
()).
toString
()
+
"\n-------------------\n\n"
+
"\n-------------------
---
\n\n"
+
"---stack top---\n"
+
FragmentUtils
.
getAllFragmentsInStack
(
getFragmentManager
()).
toString
()
+
"\n---stack bottom---\n\n"
+
"\ntopFragment: "
+
FragmentUtils
.
getLastAddFragment
(
getFragmentManager
()).
getClass
().
getSimpleName
()
+
"\ntopShowFragment: "
+
FragmentUtils
.
getTopShowFragment
(
getFragmentManager
()).
getClass
().
getSimpleName
()
);
break
;
case
R
.
id
.
btn_hide_show
:
...
...
app/src/main/java/com/blankj/androidutilcode/fragment/Demo2Fragment.java
浏览文件 @
444ff24b
...
...
@@ -62,14 +62,16 @@ public class Demo2Fragment extends Fragment
tvAboutFragment
.
setText
(
""
);
switch
(
view
.
getId
())
{
case
R
.
id
.
btn_show_about_fragment
:
tvAboutFragment
.
setText
(
"---all fragments---\n"
tvAboutFragment
.
setText
(
"lastAdd: "
+
FragmentUtils
.
getLastAddFragment
(
getFragmentManager
()).
getClass
().
getSimpleName
()
+
"\nlastAddInStack: "
+
(
FragmentUtils
.
getLastAddFragmentInStack
(
getFragmentManager
())
!=
null
?
FragmentUtils
.
getLastAddFragmentInStack
(
getFragmentManager
()).
getClass
().
getSimpleName
()
:
"null"
)
+
"\ntopShow: "
+
FragmentUtils
.
getTopShowFragment
(
getFragmentManager
()).
getClass
().
getSimpleName
()
+
"\ntopShowInStack: "
+
(
FragmentUtils
.
getTopShowFragmentInStack
(
getFragmentManager
())
!=
null
?
FragmentUtils
.
getTopShowFragmentInStack
(
getFragmentManager
()).
getClass
().
getSimpleName
()
:
"null"
)
+
"\n---all of fragments---\n"
+
FragmentUtils
.
getAllFragments
(
getFragmentManager
()).
toString
()
+
"\n-------------------\n\n"
+
"\n-------------------
---
\n\n"
+
"---stack top---\n"
+
FragmentUtils
.
getAllFragmentsInStack
(
getFragmentManager
()).
toString
()
+
"\n---stack bottom---\n\n"
+
"\ntopFragment: "
+
FragmentUtils
.
getLastAddFragment
(
getFragmentManager
()).
getClass
().
getSimpleName
()
+
"\ntopShowFragment: "
+
FragmentUtils
.
getTopShowFragment
(
getFragmentManager
()).
getClass
().
getSimpleName
()
);
break
;
case
R
.
id
.
btn_pop
:
...
...
app/src/main/java/com/blankj/androidutilcode/fragment/Demo3Fragment.java
浏览文件 @
444ff24b
...
...
@@ -74,11 +74,16 @@ public class Demo3Fragment extends Fragment
tvAboutFragment
.
setText
(
""
);
switch
(
view
.
getId
())
{
case
R
.
id
.
btn_show_about_fragment
:
tvAboutFragment
.
setText
(
"---stack top---\n"
tvAboutFragment
.
setText
(
"lastAdd: "
+
FragmentUtils
.
getLastAddFragment
(
getFragmentManager
()).
getClass
().
getSimpleName
()
+
"\nlastAddInStack: "
+
(
FragmentUtils
.
getLastAddFragmentInStack
(
getFragmentManager
())
!=
null
?
FragmentUtils
.
getLastAddFragmentInStack
(
getFragmentManager
()).
getClass
().
getSimpleName
()
:
"null"
)
+
"\ntopShow: "
+
FragmentUtils
.
getTopShowFragment
(
getFragmentManager
()).
getClass
().
getSimpleName
()
+
"\ntopShowInStack: "
+
(
FragmentUtils
.
getTopShowFragmentInStack
(
getFragmentManager
())
!=
null
?
FragmentUtils
.
getTopShowFragmentInStack
(
getFragmentManager
()).
getClass
().
getSimpleName
()
:
"null"
)
+
"\n---all of fragments---\n"
+
FragmentUtils
.
getAllFragments
(
getFragmentManager
()).
toString
()
+
"\n---stack bottom---\n"
+
"\ntopFragment: "
+
FragmentUtils
.
getLastAddFragment
(
getFragmentManager
()).
getClass
().
getSimpleName
()
+
"\ntopShowFragment: "
+
FragmentUtils
.
getTopShowFragment
(
getFragmentManager
()).
getClass
().
getSimpleName
()
+
"\n----------------------\n\n"
+
"---stack top---\n"
+
FragmentUtils
.
getAllFragmentsInStack
(
getFragmentManager
()).
toString
()
+
"\n---stack bottom---\n\n"
);
break
;
case
R
.
id
.
btn_add_show
:
...
...
utilcode/src/main/java/com/blankj/utilcode/utils/FragmentUtils.java
浏览文件 @
444ff24b
...
...
@@ -31,11 +31,12 @@ public class FragmentUtils {
private
static
final
int
TYPE_ADD_FRAGMENT
=
0x01
<<
0
;
private
static
final
int
TYPE_REMOVE_FRAGMENT
=
0x01
<<
1
;
private
static
final
int
TYPE_REPLACE_FRAGMENT
=
0x01
<<
2
;
private
static
final
int
TYPE_HIDE_FRAGMENT
=
0x01
<<
3
;
private
static
final
int
TYPE_SHOW_FRAGMENT
=
0x01
<<
4
;
private
static
final
int
TYPE_HIDE_SHOW_FRAGMENT
=
0x01
<<
5
;
private
static
final
int
TYPE_POP_ADD_FRAGMENT
=
0x01
<<
6
;
private
static
final
int
TYPE_REMOVE_TO_FRAGMENT
=
0x01
<<
2
;
private
static
final
int
TYPE_REPLACE_FRAGMENT
=
0x01
<<
4
;
private
static
final
int
TYPE_HIDE_FRAGMENT
=
0x01
<<
5
;
private
static
final
int
TYPE_SHOW_FRAGMENT
=
0x01
<<
6
;
private
static
final
int
TYPE_HIDE_SHOW_FRAGMENT
=
0x01
<<
7
;
private
static
final
int
TYPE_POP_ADD_FRAGMENT
=
0x01
<<
8
;
private
static
final
String
ARGS_ID
=
"args_id"
;
private
static
final
String
ARGS_IS_HIDE
=
"args_is_hide"
;
...
...
@@ -113,10 +114,46 @@ public class FragmentUtils {
* 移除fragment
*
* @param fragment fragment
* @return fragment
*/
public
static
Fragment
removeFragment
(
@NonNull
Fragment
fragment
)
{
return
operateFragment
(
fragment
.
getFragmentManager
(),
null
,
fragment
,
TYPE_REMOVE_FRAGMENT
);
public
static
void
removeFragment
(
@NonNull
Fragment
fragment
)
{
operateFragment
(
fragment
.
getFragmentManager
(),
null
,
fragment
,
TYPE_REMOVE_FRAGMENT
);
}
/**
* 移除到指定fragment
*
* @param fragment fragment
* @param isIncludeSelf 是否包括Fragment类自己
*/
public
static
void
removeToFragment
(
@NonNull
Fragment
fragment
,
boolean
isIncludeSelf
)
{
operateFragment
(
fragment
.
getFragmentManager
(),
isIncludeSelf
?
fragment
:
null
,
fragment
,
TYPE_REMOVE_TO_FRAGMENT
);
}
/**
* 移除同级别fragment
*/
public
static
void
removeFragments
(
@NonNull
FragmentManager
fragmentManager
)
{
List
<
Fragment
>
fragments
=
getFragments
(
fragmentManager
);
if
(
fragments
.
isEmpty
())
return
;
for
(
int
i
=
fragments
.
size
()
-
1
;
i
>=
0
;
--
i
)
{
Fragment
fragment
=
fragments
.
get
(
i
);
if
(
fragment
!=
null
)
removeFragment
(
fragment
);
}
}
/**
* 移除所有fragment
*/
public
static
void
removeAllFragments
(
@NonNull
FragmentManager
fragmentManager
)
{
List
<
Fragment
>
fragments
=
getFragments
(
fragmentManager
);
if
(
fragments
.
isEmpty
())
return
;
for
(
int
i
=
fragments
.
size
()
-
1
;
i
>=
0
;
--
i
)
{
Fragment
fragment
=
fragments
.
get
(
i
);
if
(
fragment
!=
null
)
{
removeAllFragments
(
fragment
.
getChildFragmentManager
());
removeFragment
(
fragment
);
}
}
}
/**
...
...
@@ -177,6 +214,34 @@ public class FragmentUtils {
return
fragmentManager
.
popBackStackImmediate
(
fragmentClass
.
getName
(),
isIncludeSelf
?
FragmentManager
.
POP_BACK_STACK_INCLUSIVE
:
0
);
}
/**
* 出栈同级别fragment
*
* @param fragmentManager fragment管理器
*/
public
static
void
popFragments
(
@NonNull
FragmentManager
fragmentManager
)
{
while
(
fragmentManager
.
getBackStackEntryCount
()
>
0
)
{
fragmentManager
.
popBackStackImmediate
();
}
}
/**
* 出栈所有fragment
*
* @param fragmentManager fragment管理器
*/
public
static
void
popAllFragments
(
@NonNull
FragmentManager
fragmentManager
)
{
List
<
Fragment
>
fragments
=
getFragments
(
fragmentManager
);
if
(
fragments
.
isEmpty
())
return
;
for
(
int
i
=
fragments
.
size
()
-
1
;
i
>=
0
;
--
i
)
{
Fragment
fragment
=
fragments
.
get
(
i
);
if
(
fragment
!=
null
)
popAllFragments
(
fragment
.
getChildFragmentManager
());
}
while
(
fragmentManager
.
getBackStackEntryCount
()
>
0
)
{
fragmentManager
.
popBackStackImmediate
();
}
}
/**
* 先出栈后新增fragment
*
...
...
@@ -325,6 +390,17 @@ public class FragmentUtils {
case
TYPE_REMOVE_FRAGMENT:
ft
.
remove
(
destFragment
);
break
;
case
TYPE_REMOVE_TO_FRAGMENT:
List
<
Fragment
>
fragments
=
getFragments
(
fragmentManager
);
for
(
int
i
=
fragments
.
size
()
-
1
;
i
>=
0
;
--
i
)
{
Fragment
fragment
=
fragments
.
get
(
i
);
if
(
fragment
==
destFragment
)
{
if
(
srcFragment
!=
null
)
ft
.
remove
(
fragment
);
break
;
}
ft
.
remove
(
fragment
);
}
break
;
case
TYPE_POP_ADD_FRAGMENT:
popFragment
(
fragmentManager
);
if
(
args
.
getBoolean
(
ARGS_IS_ADD_STACK
))
ft
.
addToBackStack
(
name
);
...
...
@@ -352,137 +428,162 @@ public class FragmentUtils {
* 获取最后加入的fragment
*
* @param fragmentManager fragment管理器
* @return
栈顶
fragment
* @return
最后加入的
fragment
*/
public
static
Fragment
getLastAddFragment
(
@NonNull
FragmentManager
fragmentManager
)
{
List
<
Fragment
>
fragments
=
getFragments
(
fragmentManager
);
if
(
fragments
.
isEmpty
())
return
null
;
for
(
int
i
=
fragments
.
size
()
-
1
;
i
>=
0
;
i
--)
{
if
(
fragments
.
get
(
i
)
!=
null
)
{
return
fragments
.
get
(
i
);
}
}
return
null
;
return
getLastAddFragmentIsInStack
(
fragmentManager
,
false
);
}
/**
* 获取栈中最后加入的fragment
*
* @param fragmentManager
* @return
* @param fragmentManager
fragment管理器
* @return
最后加入的fragment
*/
public
static
Fragment
getLastAddFragmentInStack
(
@NonNull
FragmentManager
fragmentManager
)
{
List
<
Fragment
>
fragments
=
getFragments
(
fragmentManager
);
if
(
fragments
.
isEmpty
())
return
null
;
for
(
int
i
=
fragments
.
size
()
-
1
;
i
>=
0
;
i
--)
{
Fragment
fragment
=
fragments
.
get
(
i
);
if
(
fragment
!=
null
&&
fragment
.
getArguments
().
getBoolean
(
ARGS_IS_ADD_STACK
))
{
return
fragment
;
}
}
return
null
;
return
getLastAddFragmentIsInStack
(
fragmentManager
,
true
);
}
/**
*
获取顶层可见
fragment
*
根据栈参数获取最后加入的
fragment
*
* @param fragmentManager fragment管理器
* @return 栈顶可见fragment
* @param isInStack 是否是栈中的
* @return 栈中最后加入的fragment
*/
public
static
Fragment
getTopShowFragment
(
@NonNull
FragmentManager
fragmentManager
)
{
return
getTopShowFragment
(
fragmentManager
,
null
);
private
static
Fragment
getLastAddFragmentIsInStack
(
@NonNull
FragmentManager
fragmentManager
,
boolean
isInStack
)
{
List
<
Fragment
>
fragments
=
getFragments
(
fragmentManager
);
if
(
fragments
.
isEmpty
())
return
null
;
for
(
int
i
=
fragments
.
size
()
-
1
;
i
>=
0
;
--
i
)
{
Fragment
fragment
=
fragments
.
get
(
i
);
if
(
fragment
!=
null
)
{
if
(
isInStack
)
{
if
(
fragment
.
getArguments
().
getBoolean
(
ARGS_IS_ADD_STACK
))
{
return
fragment
;
}
}
else
{
return
fragment
;
}
}
}
return
null
;
}
/**
* 获取顶层可见fragment
*
* @param fragmentManager fragment管理器
* @param parentFragment 父fragment
* @return 顶层可见fragment
*/
private
static
Fragment
getTopShowFragment
(
@NonNull
FragmentManager
fragmentManager
,
Fragment
parentFragment
)
{
List
<
Fragment
>
fragments
=
getFragments
(
fragmentManager
);
if
(
fragments
.
isEmpty
())
return
parentFragment
;
for
(
int
i
=
fragments
.
size
()
-
1
;
i
>=
0
;
i
--)
{
Fragment
fragment
=
fragments
.
get
(
i
);
if
(
fragment
!=
null
&&
fragment
.
isResumed
()
&&
fragment
.
isVisible
()
&&
fragment
.
getUserVisibleHint
())
{
return
getTopShowFragment
(
fragment
.
getChildFragmentManager
(),
fragment
);
}
}
return
parentFragment
;
public
static
Fragment
getTopShowFragment
(
@NonNull
FragmentManager
fragmentManager
)
{
return
getTopShowFragmentIsInStack
(
fragmentManager
,
null
,
false
);
}
/**
* 获取栈中顶层可见fragment
*
* @param fragmentManager fragment管理器
* @return 栈
顶
可见fragment
* @return 栈
中顶层
可见fragment
*/
public
static
Fragment
getTopShowFragmentInStack
(
@NonNull
FragmentManager
fragmentManager
)
{
return
getTopShowFragmentI
nStack
(
fragmentManager
,
null
);
return
getTopShowFragmentI
sInStack
(
fragmentManager
,
null
,
true
);
}
/**
*
获取栈中
顶层可见fragment
*
根据栈参数获取
顶层可见fragment
*
* @param fragmentManager fragment管理器
* @param parentFragment 父fragment
* @return 顶层可见fragment
* @param isInStack 是否是栈中的
* @return 栈中顶层可见fragment
*/
private
static
Fragment
getTopShowFragmentInStack
(
@NonNull
FragmentManager
fragmentManager
,
Fragment
parentFragment
)
{
private
static
Fragment
getTopShowFragmentIsInStack
(
@NonNull
FragmentManager
fragmentManager
,
Fragment
parentFragment
,
boolean
isInStack
)
{
List
<
Fragment
>
fragments
=
getFragments
(
fragmentManager
);
if
(
fragments
.
isEmpty
())
return
parentFragment
;
for
(
int
i
=
fragments
.
size
()
-
1
;
i
>=
0
;
i
--
)
{
for
(
int
i
=
fragments
.
size
()
-
1
;
i
>=
0
;
--
i
)
{
Fragment
fragment
=
fragments
.
get
(
i
);
if
(
fragment
!=
null
&&
fragment
.
isResumed
()
&&
fragment
.
isVisible
()
&&
fragment
.
getUserVisibleHint
()
&&
fragment
.
getArguments
().
getBoolean
(
ARGS_IS_ADD_STACK
))
{
return
getTopShowFragmentInStack
(
fragment
.
getChildFragmentManager
(),
fragment
);
if
(
fragment
!=
null
&&
fragment
.
isResumed
()
&&
fragment
.
isVisible
()
&&
fragment
.
getUserVisibleHint
())
{
if
(
isInStack
)
{
if
(
fragment
.
getArguments
().
getBoolean
(
ARGS_IS_ADD_STACK
))
{
return
getTopShowFragmentIsInStack
(
fragment
.
getChildFragmentManager
(),
fragment
,
true
);
}
}
else
{
return
getTopShowFragmentIsInStack
(
fragment
.
getChildFragmentManager
(),
fragment
,
false
);
}
}
}
return
parentFragment
;
}
/**
* 查找fragment
*
* @param fragmentManager fragment管理器
*/
public
static
Fragment
findFragment
(
@NonNull
FragmentManager
fragmentManager
,
Class
<?
extends
Fragment
>
fragmentClass
)
{
List
<
Fragment
>
fragments
=
getFragments
(
fragmentManager
);
if
(
fragments
.
isEmpty
())
return
null
;
return
fragmentManager
.
findFragmentByTag
(
fragmentClass
.
getName
());
}
/**
* 获取目标fragment的前一个fragment
*
* @param fragment 目标fragment
* @param destFragment 目标fragment
* @return 目标fragment的前一个fragment
*/
public
static
Fragment
getPreFragment
(
@NonNull
Fragment
f
ragment
)
{
FragmentManager
fragmentManager
=
f
ragment
.
getFragmentManager
();
public
static
Fragment
getPreFragment
(
@NonNull
Fragment
destF
ragment
)
{
FragmentManager
fragmentManager
=
destF
ragment
.
getFragmentManager
();
if
(
fragmentManager
==
null
)
return
null
;
List
<
Fragment
>
fragments
=
getFragments
(
fragmentManager
);
if
(
fragments
.
isEmpty
())
return
null
;
int
index
=
fragments
.
indexOf
(
fragment
);
for
(
int
i
=
index
-
1
;
i
>=
0
;
i
--)
{
if
(
fragments
.
get
(
i
)
!=
null
)
{
return
fragments
.
get
(
i
);
boolean
flag
=
false
;
for
(
int
i
=
fragments
.
size
()
-
1
;
i
>=
0
;
--
i
)
{
Fragment
fragment
=
fragments
.
get
(
i
);
if
(
flag
&&
fragment
!=
null
)
{
return
fragment
;
}
if
(
fragment
==
destFragment
)
{
flag
=
true
;
}
}
return
null
;
}
/**
* 获取同级别
的
fragment
* 获取同级别fragment
*
* @param fragmentManager fragment管理器
* @return 同级别的fragments
*/
public
static
List
<
Fragment
>
getFragments
(
@NonNull
FragmentManager
fragmentManager
)
{
return
getFragmentsIsInStack
(
fragmentManager
,
false
);
}
/**
* 获取栈中同级别fragment
*
* @param fragmentManager fragment管理器
* @return 栈中同级别fragment
*/
public
static
List
<
Fragment
>
getFragmentsInStack
(
@NonNull
FragmentManager
fragmentManager
)
{
return
getFragmentsIsInStack
(
fragmentManager
,
true
);
}
/**
* 根据栈参数获取同级别fragment
*
* @param fragmentManager fragment管理器
* @param isInStack 是否是栈中的
* @return 栈中同级别fragment
*/
private
static
List
<
Fragment
>
getFragmentsIsInStack
(
@NonNull
FragmentManager
fragmentManager
,
boolean
isInStack
)
{
List
<
Fragment
>
fragments
=
fragmentManager
.
getFragments
();
if
(
fragments
==
null
||
fragments
.
isEmpty
())
return
Collections
.
emptyList
();
return
fragments
;
List
<
Fragment
>
result
=
new
ArrayList
<>();
for
(
int
i
=
fragments
.
size
()
-
1
;
i
>=
0
;
--
i
)
{
Fragment
fragment
=
fragments
.
get
(
i
);
if
(
fragment
!=
null
)
{
if
(
isInStack
)
{
if
(
fragment
.
getArguments
().
getBoolean
(
ARGS_IS_ADD_STACK
))
{
result
.
add
(
fragment
);
}
}
else
{
result
.
add
(
fragment
);
}
}
}
return
result
;
}
/**
...
...
@@ -492,48 +593,61 @@ public class FragmentUtils {
* @return 所有fragment
*/
public
static
List
<
FragmentNode
>
getAllFragments
(
@NonNull
FragmentManager
fragmentManager
)
{
return
getAllFragments
(
fragmentManager
,
new
ArrayList
<
FragmentNode
>()
);
return
getAllFragments
IsInStack
(
fragmentManager
,
new
ArrayList
<
FragmentNode
>(),
false
);
}
/**
* 获取所有fragment
* 获取
栈中
所有fragment
*
* @param fragmentManager fragment管理器
* @param result 结果
* @return 所有fragment
*/
private
static
List
<
FragmentNode
>
getAllFragments
(
@NonNull
FragmentManager
fragmentManager
,
List
<
FragmentNode
>
result
)
{
List
<
Fragment
>
fragments
=
fragmentManager
.
getFragments
();
if
(
fragments
==
null
||
fragments
.
isEmpty
())
return
Collections
.
emptyList
();
for
(
int
i
=
fragments
.
size
()
-
1
;
i
>=
0
;
i
--)
{
Fragment
fragment
=
fragments
.
get
(
i
);
if
(
fragments
.
get
(
i
)
==
null
)
continue
;
result
.
add
(
new
FragmentNode
(
fragment
,
getAllFragments
(
fragment
.
getChildFragmentManager
(),
new
ArrayList
<
FragmentNode
>())));
}
return
result
;
public
static
List
<
FragmentNode
>
getAllFragmentsInStack
(
@NonNull
FragmentManager
fragmentManager
)
{
return
getAllFragmentsIsInStack
(
fragmentManager
,
new
ArrayList
<
FragmentNode
>(),
true
);
}
/**
*
获取回退栈中的
fragment
*
根据栈参数获取所有
fragment
* <p>需之前对fragment的操作都借助该工具类</p>
*
* @param fragmentManager fragment管理器
* @return 回退栈中的fragment
* @param result 结果
* @param isInStack 是否是栈中的
* @return 栈中所有fragment
*/
public
static
List
<
FragmentNode
>
getAllFragmentsInStack
(
@NonNull
FragmentManager
fragmentManager
)
{
private
static
List
<
FragmentNode
>
getAllFragmentsIsInStack
(
@NonNull
FragmentManager
fragmentManager
,
List
<
FragmentNode
>
result
,
boolean
isInStack
)
{
List
<
Fragment
>
fragments
=
fragmentManager
.
getFragments
();
if
(
fragments
==
null
||
fragments
.
isEmpty
())
return
Collections
.
emptyList
();
List
<
FragmentNode
>
result
=
new
ArrayList
<>();
for
(
int
i
=
fragments
.
size
()
-
1
;
i
>=
0
;
i
--)
{
for
(
int
i
=
fragments
.
size
()
-
1
;
i
>=
0
;
--
i
)
{
Fragment
fragment
=
fragments
.
get
(
i
);
if
(
fragments
.
get
(
i
)
!=
null
&&
fragment
.
getArguments
().
getBoolean
(
ARGS_IS_ADD_STACK
))
{
result
.
add
(
new
FragmentNode
(
fragment
,
getAllFragments
(
fragment
.
getChildFragmentManager
(),
new
ArrayList
<
FragmentNode
>())));
if
(
fragment
!=
null
)
{
if
(
isInStack
)
{
if
(
fragment
.
getArguments
().
getBoolean
(
ARGS_IS_ADD_STACK
))
{
result
.
add
(
new
FragmentNode
(
fragment
,
getAllFragmentsIsInStack
(
fragment
.
getChildFragmentManager
(),
new
ArrayList
<
FragmentNode
>(),
true
)));
}
}
else
{
result
.
add
(
new
FragmentNode
(
fragment
,
getAllFragmentsIsInStack
(
fragment
.
getChildFragmentManager
(),
new
ArrayList
<
FragmentNode
>(),
false
)));
}
}
}
return
result
;
}
/**
* 查找fragment
*
* @param fragmentManager fragment管理器
* @param fragmentClass fragment类
* @return 查找到的fragment
*/
public
static
Fragment
findFragment
(
@NonNull
FragmentManager
fragmentManager
,
Class
<?
extends
Fragment
>
fragmentClass
)
{
List
<
Fragment
>
fragments
=
getFragments
(
fragmentManager
);
if
(
fragments
.
isEmpty
())
return
null
;
return
fragmentManager
.
findFragmentByTag
(
fragmentClass
.
getName
());
}
/**
* 处理fragment回退键
* <p>如果fragment实现了OnBackClickListener接口,返回{@code true}: 表示已消费回退键事件,反之则没消费</p>
...
...
@@ -542,6 +656,7 @@ public class FragmentUtils {
* @param fragment fragment
* @return 是否消费回退事件
*/
public
static
boolean
dispatchBackPress
(
@NonNull
Fragment
fragment
)
{
return
dispatchBackPress
(
fragment
.
getFragmentManager
());
}
...
...
@@ -557,7 +672,7 @@ public class FragmentUtils {
public
static
boolean
dispatchBackPress
(
@NonNull
FragmentManager
fragmentManager
)
{
List
<
Fragment
>
fragments
=
fragmentManager
.
getFragments
();
if
(
fragments
==
null
||
fragments
.
isEmpty
())
return
false
;
for
(
int
i
=
fragments
.
size
()
-
1
;
i
>=
0
;
i
--
)
{
for
(
int
i
=
fragments
.
size
()
-
1
;
i
>=
0
;
--
i
)
{
Fragment
fragment
=
fragments
.
get
(
i
);
if
(
fragment
!=
null
&&
fragment
.
isResumed
()
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录