新东西011--Android Fragment常见错误分析
2015-10-16 11:48
344 查看
Fragment的onResume和onHiddenChanged差异解析
OnHiddenChanged:它是onResume的辅助工具,它在第一次进入Fragment和销毁Fragment的时候不会调用。这也意味着使用replace方法切换Fragment的时候它不会得到调用(因为使用replace(id,fragmentB)切换的时候,目标fragmentB会重建,会重走FramentB的生命周期)。但在同一个Activity下通过hide/show方法切换Fragment的时候就会触发这个方法。通过一个boolean hidden的参数,对同一Activity下的Fragment隐藏显示变化做区分。OnResume:跟activity生命周期相似,在new Fragment,并将该Fragmentd加载到界面的时候,重走Fragment的生命周期函数,onCreateView-onresume(只列举部分)。同时,它也跟activity的生命周期相关,比如ActivityA下有一个FragmentA,当从ActivityA跳转到ActivityB,然后从ActivityB返回ActivityA的时候,会调用FragmentA的onResume方法。这也说明Fragment的onResume是依赖于Activity的onResume存在的,只要这个Fragment对象不变(因为一新建就会走自己的生命周期函数,自然会走onResume),那么只有当Activity调用onResume的时候才会调用其下Fragment的onResume方法。
这里也顺便提一下,“onResume只会调用一次的问题”,有很多朋友在开发过程中复用Fragment,使用hiden/show切换Fragment,同时又没有切换Activity显示,那么除了第一次走Fragment周期函数的时候会调用onResume,其余都不会调用,因为Fragment对象不变,Activity也没有调用onResume方法。
Fragment的commit()方法和cmmitAllowingStateLose()的区别
在说这个之前需要普及一点Activity的onSaveInstanceState的调用时机,onSaveInstanceState调用时机是指当前activity在当前activety队列的最上层的时候,这个时候旋转屏幕肯定会引起onSaveInstanceState的调用。其次,在显示在最上层的情况下,用户按下Home键或者切换应用,切换activity的时候都会引起onsaveInstance的调用。cmmitAllowingStateLose:在Activity的onSaveInstanceState之后调用增减Fragment的操作并commit会出现IllegalStateException错误,原因是因为Activity的commit方法一定要在onSaveInstancestate方法之前调用。如果要在之后调用就要使用commitAllowingStateLose来确保使用。
相关文章推荐
- Android Fragment 基本了解(图文介绍)
- Android Fragment的使用方法(翻译)
- Android 中 Fragment的使用大全
- Android基础之使用Fragment适应不同屏幕和分辨率(分享)
- Android中给fragment写入参数的轻量开发包FragmentArgs简介
- Android Fragment中使用SurfaceView切换时闪一下黑屏的解决办法
- Fragment里添加ListView不要用ListFragment
- 详解Android开发中Fragment的使用
- Android中fragment嵌套fragment问题解决方法
- Android基础之Fragment与Activity交互详解
- Android基础之使用Fragment控制切换多个页面
- Fragment
- Android Fragment 真正的完全解析(下)
- Android之Fragment
- Fragment+viewpager+Fragment 嵌套 第二次进入该fragment不显示数据
- android fragment详细介绍
- Android4.0-Fragment框架实现方式剖析
- Fragment-FragmentMannager中的方法
- Fragment与Activity通讯
- 理解Fragment生命周期