Skip to content
YoKey edited this page Apr 26, 2017 · 38 revisions

Fragmentation在使用过程中有问题?

欢迎发邮件或者提issue。

新版本0.10有什么重要变化?

1、添加可全局配置的Fragmentaion Builder类

  • 提供方便打开栈视图Dialog的方法:

  • bubble: 显示悬浮球,可点击唤出栈视图Dialog,可自由拖拽

  • shake: 摇一摇唤出栈视图Dialog

  • none: 默认不显示栈视图Dialog

  • 根据是否是Debug环境,方便区别处理异常("Can not perform this action after onSaveInstanceState!")

2、Fix与调整

  • Fix v4-25.1.1在同时加载多Fragment时导致事务队列阻塞的BUG
  • Fix popToChild(fg,boolean,Runnable)层级错误问题
  • 移除Fragment中view.setClickable(true)的代码,避免穿透问题 见#249
  • 解决官方ViewPager中Fragment嵌套时,父Fragment出栈动画时,子Fragment空白问题
  • onSupportVisible()调整为在onLazyInitView()后触发

新版本0.9有什么重要变化?

1、更强的兼容性,Fix已知BUG

  • 解决多点触控问题
  • 25.1.0+的v4包,Fragment的一些机制改变了,0.9进行了startWithPop(),onEnterAnimationEnd()兼容
  • onFragmentResult()现在在任何情况都可以被正确触发了
  • Fix startWithPop()可能导致内存泄漏的问题

2、完善了SharedElement

官方在25.1.0+的v4包对add方式加载Fragment的SharedElement做了兼容,所以趁此机会对SharedElement进行了近一步的兼容,现在如果你使用25.1.0+的v4包,SharedElement在5.0+的设备可以完美工作啦!

新版本0.8有什么重要变化?

1、现在库中事务默认以commitAllowingStateLoss()方式提交

该项改变主要为了避免特殊不可控的情况下抛出的异常:Can not perform this action after onSaveInstanceState!; 提升线上版本的稳定性,“捕捉”并警告该异常,避免Crash。

2、onSupportVisible(), onSupportInvisible()

这2个方法会在Fragment可见时回调,即:只要该Fragment对用户可见时,即会被调用,包括嵌套的子Fragment

比如A内有个子FragmentB,B通过A startFragment(C) (此时A和C是同级Fragment),当你pop(C)时,A和B的onSupportVisible()都会被回调

我相信这2个方法在单AC多FG等嵌套较多的结构上,开发过程会方便很多!

3、onLazyInitView(Bundle saveInstanceState)

终于提供自有的懒加载方法了! 该方法会在 Fragment第一次对用户可见时回调(即第一次onSupportVisible()被回调时)。

`onLazyInitView()`的懒加载同时包括了 同级Fragment的懒加载情况 以及 ViewPager下的懒加载情况。

PS:onLazyInitView()onSupportVisible()等都是View安全的方法,即:在调用时可以确保onCreateView()已经被调用。

4、transaction()

现在提供了:

 supportFragment.transaction()
                .setTag(tag)
                //.addSharedElement(xx).setLaunchMode(SINGLETASK).withPop(true).forResult(1)
                .commit();
// 接着执行start()
 start(supportFragment);

在你start()或startXX()之前,你可以调用fragment的transaction()方法,该方法可以允许你设置需要start的Fragment事务条件。

例如:

  • 自定义一个Tag

  • 设置launchMode,设置是否同时关闭当前Fragment,设置SharedElement效果等等,完全可以用transaction()+start()来实现之前的各种startXX()了,甚至可以做的事情更多;

5、FragmentLifecycleCallbacks

给SupportActivity提供了类似Application的registerActivityLifecycleCallbacks(ActivityLifecycleCallbacks callback):

registerFragmentLifecycleCallbacks(FragmentLifecycleCallbacks callback){}

该方法可以监控Activity下所有Fragment的生命周期(包括support生命周期 onSupportVisible()等等)。

一些小改动

1、修正了setFragmentResult(bundle)的拼写错误问题。(原:setFramgentResult);

2、isSupportHidden()方法不再暴露给外部使用,懒加载请直接用onLazyInitView(Bundle saveInstanceState)

3、SupportActivity的onBackPressed()标记为final,不可被继承,但是可以调用,请使用onBackPressedSupport()代替;

4、添加了只有一个参数的showHideFragment(SupportFragment showFragment),库内部会帮你隐藏上一个Fragment。


0.7X版本介绍看这里