近期开源了一个基于 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());
}
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.