fragment 淡入淡出_Fragment之Fragmentation库(添加转场动画)

本文介绍了Fragmentation库的使用,包括快速开发、调试、生命周期方法和转场动画等功能。在使用Fragment时,文章提到了常见问题如getActivity()空指针、Can not perform this action after onSaveInstanceState异常、Fragment重叠和转场动画的深坑。并提供了相应的解决方案,如使用onAttach设置Activity引用、在onResumeFragments时提交事务、以及解决Fragment重叠和嵌套问题的方法。此外,文章还讨论了Fragment在“内存重启”后的处理策略和FragmentPagerAdapter+ViewPager的注意事项。
摘要由CSDN通过智能技术生成

部分内容来源于别人的总结,如有冒犯侵权,请告知! 邮箱:simoncqhy@163.com.谢谢!我只想做一个记录,以免自己以后出现不知道怎么解决.

Fragmentation库:非常适合单Activity+多Fragment 或者 多模块Activity+多Fragment的架构

特性

1、快速开发出各种嵌套设计的Fragment App

2、实时查看Fragment的(包括嵌套Fragment)栈视图的对话框和Log,方便调试

3、增加启动模式、startForResult等类似Activity方法

4、类似Android事件分发机制的Fragment回退方法:onBackPressedSupport(),轻松为每个Fragment实现Back按键事件

5、New!!! 提供onSupportVisible()等生命周期方法,简化嵌套Fragment的开发过程; 提供统一的onLazyInitView()懒加载方法

6、提供靠谱的 Fragment转场动画 的解决方案

7、更强的兼容性, 解决多点触控、重叠等问题

8、支持SwipeBack滑动边缘退出(需要使用Fragmentation_SwipeBack库,

在使用fragment的过程中,我相信大家都遇到很多坑,在开发中,虽然谷歌推出了碎片化处理,但是里面本身还有很多bug.

在开发中最容易出现的bug如下:

1、getActivity()空指针

2、异常:Can not perform this action after onSaveInstanceState

3、Fragment重叠异常-----正确使用hide、show的姿势

4、Fragment嵌套的那些坑

5、未必靠谱的出栈方法remove()

6、多个Fragment同时出栈的深坑BUG

7、深坑 Fragment转场动画

getActivity()空指针

可能你遇到过getActivity()返回null,或者平时运行完好的代码,在“内存重启”之后,调用getActivity()的地方却返回null,报了空指针异常。

大多数情况下的原因:你在调用了getActivity()时,当前的Fragment已经onDetach()了宿主Activity。

比如:你在pop了Fragment之后,该Fragment的异步任务仍然在执行,并且在执行完成后调用了getActivity()方法,这样就会空指针。

解决方案:

在Fragment基类里设置一个Activity mActivity的全局变量,在onAttach(Activity activity)里赋值,使用mActivity代替getActivity(),保证Fragment即使在onDetach后,仍持有Activity的引用(有引起内存泄露的风险,但是异步任务没停止的情况下,本身就可能已内存泄漏,相比Crash,这种做法“安全”些)即:

protected Activity mActivity;

@Override

public void onAttach(Activity activity) {

super.onAttach(activity);

this.mActivity = activity;

}

/**

如果你用了support 23的库,上面的方法会提示过时,有强迫症的小伙伴,可以用下面的方法代替

*/

@Override

public void onAttach(Context context) {

super.onAttach(context);

this.mActivity = (Activity)context;

}

异常:Can not perform this action after onSaveInstanceState

在你离开当前Activity等情况下,系统会调用onSaveInstanceState()帮你保存当前Activity的状态、数据等,直到再回到该Activity之前(onResume()之前),你使用commit()提交了Fragment事务,就会抛出该异常!

解决方法2个:

1、(不推荐)该事务使用commitAllowingStateLoss()方法提交,但是有可能导致该次提交无效!(在此次离开时恰巧Activity被强杀时)

2、(推荐)在重新回到该Activity的时候(onResumeFragments()或onPostResume()),再执行该事务!

Fragment重叠异常-----正确使用hide、show的姿势和replace(坑相对来说要少些)

原因是FragmentManager帮我们管理Fragment,当发生“内存重启”,他会从栈底向栈顶的顺序一次性恢复Fragment;

但是因为没有保存Fragment的mHidden属性,默

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值