近期开源了一个基于 AOP 的 Fragment 管理框架FragmentRigger。
目的有两点:
疑问一: 你可能会问了,网上关于 Fragment 的框架不是一抓一大把,为什么还要重复造轮子呢?
是的,关于Fragment
的框架在网上是比较多的,如比较出名的YoKeyword大神的Fragmentation,解决了各个场景下的 Fragment 问题,并添加了左滑退出等额外的支持,不可谓不强大,请收下我的膝盖。
疑问二: 请正面回答疑问一,这个框架有什么不一样的地方吗?难道是老农民吗?重复造轮子闲的蛋疼?
网上大多数的Fragment
框架都是写了一个Fragment
和Activity
父类,并添加了相应的方法支持,所以在使用那些框架的时候需要你的Activity
和Fragment
继承他们框架提供的父类(不知怎么的,笔者对继承别人的父类老是有点排斥)。
是啊,Fragment
的很多操作都是生命周期相关的,所以不继承父类按理说是无法进行Fragment
的管理的,但是FragmentRigger
就是可以让你在集成的时候不需要继承任何类就可以对 Fragment 进行操作!!!(当然,你自己的父类还是要继承的= =)
疑问三: 啥?不继承??那怎么使用???会不会更复杂?
复杂??本框架的目的之一就是让 Fragment 的使用更加简单,好了,废话不 BB,还是来一行代码最省事。
//在 Activity 中 add 并 show BFragment.
@Puppet(containerViewId = R.id.container)
public class AActivity extend AppcompatActivity{
//触发显示操作
Rigger.getRigger(this).startFragment(BFragment.newInstance());
}
没骗你吧,上述的代码有没继承,调用一行代码,成本只有一行注解就可以使用!!!
疑问四: 代码这么少,也不继承,靠不靠谱啊?
重温一下本框架的目的之一:让 Fragment 的使用更加简单,不继承是因为确实有很多人排斥使用第三方的父类,笔者也不例外,就算知道里面没什么要紧的事,但还是极度没有安全感,框架的原理是:使用 AOP 把Activity/Fragment
的生命周期等方法定义为切点,插入到代理类中,一切操作都通过代理类来进行!!!
栈管理
懒加载
同级显示
onBackPressed
等常见的方法支持内存重启
时的一系列异常~~本框架提供了强大的 Api 支持。
和已有的大部分Fragment
框架不同,不需要继承任何父类,只需要添加一行注解即可。
在操纵Fragment
的时候只需要通过代理类来操作,本框架完全采用一种插入式 的方式来降低使用成本。
1、声明为框架的支持类
在需要使用本框架的
Activity/Fragment
上添加注解@Puppet
即可。
//MainActivity.java
@Puppet(containerViewId = R.id.atyContent)//containerViewId 是你需要操纵的 Fragment 在 add 时候的 container view
public class MainActivity extends AppCompatActivity
//TestFragment.java
@Puppet
public class TestFragment extends Fragment
2、使用框架操纵Fragment
添加
@Puppet
注解之后,在使用框架提供的Fragment
操纵的方法的时候通过代理类Rigger
来操纵。
@Puppet(containerViewId = R.id.atyContent)
public class MainActivity extends AppCompatActivity{
...
//add 并 show 一个 Fragment 并添加至栈中,此时添加的 Fragment 是在 @Puppet 中的 containerViewId 中的
Rigger.getRigger(this).startFragment(TestFragment.newInstance());
}
1
JustKiddingBaby OP 希望可以和大佬们相互交流,不断完善这个框架,如果有什么意见或者建议,欢迎吐槽~
|
2
fan123199 2018-01-02 10:17:18 +08:00
赞,文档很全很细致。一个问题,懒加载的 lifecycle 是怎样的,点到该页面执行 lazyoncreate,那 oncreate 呢? oncreateview 呢?
|
3
JustKiddingBaby OP @fan123199 其他生命周期正常执行,提供了额外的懒加载生命周期方法 onLazyLoadViewCreated(Bundle),这个方法可以保证在 ViewPager 等场景中只有在 Fragment 显示的时候调用一次,再次显示不调用。
本框架的懒加载是针对 ViewPager 中的预加载实现的,并且模仿 ViewPager 中的预加载机制实现了本框架 show 场景下的懒加载支持。 生命周期: ... onViewCreated setUserVisibleHint onLazyLoadViewCreated ... |
4
ChenSir 2018-01-02 10:41:39 +08:00
前排。Star 一波再说
|
5
JustKiddingBaby OP @ChenSir 谢谢大佬~
|
6
lovefantasy 2018-01-02 10:52:43 +08:00 via Android
大佬好
|
7
JustKiddingBaby OP @lovefantasy 大佬客气了。
|
8
jerry12547 2018-01-02 15:54:30 +08:00
大佬的文章在掘金看到过了。star 过了。还没细细品读
|
9
JustKiddingBaby OP @jerry12547 谢谢支持~
|
10
jerry12547 2018-01-02 17:07:43 +08:00
@JustKiddingBaby 大佬你的 blog 内容好少呀
|
11
JustKiddingBaby OP @jerry12547 咳,忽略,写博客太费时间了,没好好维护博客,也没什么有价值的文章,今年好好维护一下~
|