SupportFragment
SupportFragment copied to clipboard
:bulb:An Android frame In order to support single Activity+multi Fragment framework.(为了给单Activity+多Fragment架构提供支持的框架)
SupportFragment
该项目已经停止维护,请移至FragmentRigger,这个一个基于AOP设计的Fragment框架。
简介
这是一个Fragment封装库,解决Fragment在使用过程中遇到的常见问题,并封装了Fragment和Activity的基类,并针对Fragment常见使用场景封装了一些常用操作。 帮助项目支持单Activity+多Fragment或者多Activity+多Fragment架构。
功能介绍
- [x] 完全解决同级Fragment重叠问题
- [x] 为Fragment多层嵌套提供支持
- [x] 为Fragment提供OnBackPressed()监听方法
- [x] 提供Fragment和Activity基类,封装一系列方法,使用起来更加方便
- [x] 解决在“内存重启”时候可能发生的一系列异常
Demo演示
Demo为仿照探探做的App,整体架构采用了单Activity+多Fragment,使用MVP+MVVM框架,采用ARouter路由框架进行界面跳转,使用EventBus作为消息总线通知框架, 后续会推出该demo相关的wiki。

最新版本
模块 | supportfragment |
---|---|
最新版本 |
集成
Maven集成
<dependency>
<groupId>com.justkiddingbaby</groupId>
<artifactId>supportfragment</artifactId>
<version>最新版本</version>
<type>pom</type>
</dependency>
JCenter集成
第一步 在项目build.gradle中添加
repositories {
jcenter()
}
第一步 在module的build.gradle中添加
compile 'com.justkiddingbaby:supportfragment:最新版本'
用法
为Activity添加支持
Activity需要继承SupportActivity并重写int getFragmentContentId()方法, 该方法用于startFragment(SupportFragment)时候作为根视图显示,可让项目的Activity基类继承该类。
TestAvtivity.java
public class TestActivity extends SupportActivity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
@Override
public int getFragmentContentId() {
return R.id.main_content;
}
}
main_content.xml
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/mainFrameContent"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
为Fragment添加支持
Fragment需要继承SupportFragment即可,在项目中可让项目的Fragment基类继承该类。
TestFragment.java
public class TestFragment extends SupportFragment {
}
Fragment中使用时和正常使用Fragment时候一样,只是父类改为了SupportFragment
使用说明
返回值 | 方法 | 说明 | 场景 |
---|---|---|---|
int | getFragmentContentId() | 返回Fragment的根布局id,在startFragment()时作为显示区域 | Activity |
void | startFragment(SupportFragment) | 隐藏getFragmentContentId()中显示的视图,并显示新的Fragment | Activity/Fragment |
void | startFragmentForResult(SupportFragment,int) | 和startFragment使用相似,支持返回值 | Activity/Fragment |
void | startFragmentForResult(SupportFragment,int,Bundle) | 和startFragment使用相似,支持返回值 | Activity/Fragment |
void | setFragmentResult(int,Bundle) | 设置Fragment的返回值 | Activity/Fragment |
void | onFragmentResult(int,int,Bundle) | Fragment的返回值的回调 | Activity/Fragment |
void | showFragment(SupportFragment,int) | 在int位置显示Fragment,并保留该contentId中之前的Fragment,用于Fragment多层嵌套 | Activity/Fragment |
void | hideFragment(SupportFragment,int) | 隐藏Fragment的显示,用于Fragment多层嵌套 | Activity/Fragment |
void | replaceFragment(SupportFragment,int) | 替换int参数的Fragment并销毁之前的Fragment,用于Fragment多层嵌套 | Activity/Fragment |
void | showPopFragment() | 显示栈顶的Fragment | Activity/Fragment |
void | closeCurrentAndShowPopFragment() | 关闭当前Fragment并显示上级Fragment | Activity/Fragment |
void | clearFragment() | 清空栈中所有Fragment | Activity/Fragment |
void | close() | 关闭当前Fragment或者Activity | Activity/Fragment |
void | closeFragment(SupportFragment) | 关闭指定Fragment | Activity/Fragment |
String | getFragmentTAG() | 返回Fragment的TAG,可以重写,但不建议这样做,自定义可能会有重复的TAG,会发生相关异常 | Fragment |
boolean | isContainChildFragment() | 返回当前Activity/Fragment是否有子Fragment | Activity/Fragment |
SupportFragment | getPopSupportFragment() | 返回栈顶的SupportFragment,否则返回null | Activity/Fragment |
boolean | isHideLashFragmentBeforeFinish() | Activity在finish之前是否显示最上层的Fragment,默认为false | Activity |
上述的方法,有的被Activity支持,有的被Fragment支持,还有二者均支持的,根据自己的业务逻辑判断在何处使用什么方法, 只要处理好Fragment上下级之间的关系,Fragment还是比较简单的。
发布历史
v1.1.15(2017/8/5)
1、修复Fragment调用onBackPressed()方法时,栈顶的Fragment在isHideLashFragmentBeforeFinish()
返回为false的时候出栈。
v1.1.13(2017/8/16)
1、添加isContainChildFragment()
方法。
2、去除SupportFragment的onKeyDown
方法支持。
3、添加getPopSupportFragment()
方法。
4、添加isHideLashFragmentBeforeFinish()
方法。
v1.1.7(2017/8/15)
1、为SupportActivity/SupportFragment添加isSupportResumed()
方法支持,判断宿主Activity是否处于Resume状态。
v1.1.6(2017/8/10)
1、为Fragment添加onKeyDown(int keyCode, KeyEvent event)
方法的支持。
v1.1.5(2017/6/29)
1、修复依赖supportFragment框架时allowBackup冲突问题。
v1.1.4(2017/5/19)
1、更改框架项目最小SDK版本为12
v1.1.3(2017/5/19)
1、修复引入过程中可能遇到包冲突问题。
2、修改框架v7包版本及相关SDK版本。
v1.1.2(2017/5/17)
1、修复Fragment使用时可能出现Bundle空指针异常。
v1.1.1(2017/5/15)
1、修复增加startFragmentForResult系列方法中的onFragmentResult中requestCode参数传递错误。
v1.1.0(2017/5/15)
1、增加hideFragment(SupportFragment)方法。
2、增加startFragmentForResult系列方法,使用参考startActivityForResult。
v1.0.2(2017/5/8)
1、修复Support方法中事物保存机制,使用队列对SupportTransaction进行存储及恢复。
v1.0.1(2017/5/4)
1、修改Support框架中的showFragment场景,支持added过的Fragment进行showFragment方法的使用。
v1.0(2017/5/3)
1、SupportFragment框架分布,封装各种Fragment场景。
2、封装框架使用场景Demo,仿探探App。