Fragment使用的正确姿势



网上关于Fragment的使用建议和分析很多,但是依然会有很多人在使用Fragment的时候出现各种奇葩错误

这篇文章我分享一下各种项目中解决Fragment的各种注意事项(不做原理分析),如果有错误欢迎大家指出

0,必须知道Activity 、Fragment的生命周期。平时多看多对比就好,强记感觉效果不好

1,如果Fragment初始化时需要传入参数那么必须实现setArguments,同时必须重新onCreate方法对存入的值进行读取

2,Fragment如果在运行期间参数的新的全部变量(网络,计算等),必须在onSaveInstanceState里面进行保存;可以在onViewCreated里面重新对view赋值

3,尽量不要用到getActivity,如果用到一定需要非空判断

4,Fragment最好不要用到异步线程,如果用到一定要考虑fragment是否被回收后线程回调情况;或者在onPase里面中断

5,如果在其它地方拿到frament的引用在使用它的全部变量,必须考虑当前fragment是否存在或者2是否已经实现

6,FragmentManager系统会用这个来管理如果出现的fragment,如果出现奇葩的不可理解的异常请想一下这个类

举个栗子:viewpager+fragment的使用场景,List<Fragment> mFragments 中需要修改或删除其中的对象,调用刷新比起作用。简单修改你需要在FragmentManager里面移除你需要变得的fragment或者替换,即可达到效果

7,百度统计关于fragment的统计未考虑6情况,可能会造成onResume和onPase方法不一致,然后给出一个内存泄露的警告

8,如果在fragment的布局文件直接指定点击处理事件,如果在当前的fragment里面找不到,请看加载它的Activity

9,fragment里面startActivityForResult,在低版本里面不会有相应的回调。解决办法在它的Activity里面处理

10,fragment里面 View mView = inflater.inflate(R.layout.xxx null);第二个参数如果没有特殊使用请设置null

11,一个优化FragmentManager可以用findByTag获取你当前使用的fragment,而不用时时的保持引用(注意6)

12,v4包和sdk下面的引用路径用的不是一个东东,会有兼容问题

13,请用DialogFragment取代AlertDialog

最后补充一个图来源不知道了

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-07 14:52:25

Fragment使用的正确姿势的相关文章

程序员取悦女朋友的正确姿势---Tips(iOS美容篇)

前言 女孩子都喜欢用美图工具进行图片美容,近来无事时,特意为某人写了个自定义图片滤镜生成器,安装到手机即可完成自定义滤镜渲染照片.app独一无二,虽简亦繁. JH定律:魔镜:最漂亮的女人是你老婆魔镜:程序员不是木头人 核心技术 图片滤镜核心技术的基本思路如下: 核心技术流程 具体流程 1.创建一个图像处理工具类 注:该类实例包括一个图像处理方法,该方法在传入原始图像和一个颜色矩阵后生成一个处理好的图像. @interface JHFeilterManager : NSObject @proper

docker centos rpm离线安装1.8.2及pull的正确姿势

1.离线安装 本次只针对1.8.2版本,所需要的rpm包如下 docker-engine-1.8.2-1.el7.centos.x86_64.rpm(已上传51cto) libcgroup-0.41-8.el7.x86_64.rpm libcgroup-devel-0.41-8.el7.x86_64.rpm libcgroup-pam-0.41-8.el7.x86_64.rpm libcgroup-tools-0.41-8.el7.x86_64.rpm(libcgroup请参考开源镜像库) 简单

观看学习视频的正确姿势与姿态

开学至今,时时被二柱子逼得走投无路. 痛定思过,目前的自己确实是"三拍",一拍觉得这样那样一定可以胸有成竹,二拍有了点子拿起手术刀就开始实践,三拍无法实现代码拍屁股放弃.啊,我为了二柱子建了好多好多包,想过好多好多条"去北京的路",结果...还是死于基础太烂.也不愿意头悬梁锥刺股.所以呢,那就改进学习方式呗,提高效率. 整个开发过程中,自己犯了一个很大的错误.即是在第五周中途才突然发现,其实代码在整个学习过程中虽说是基础但不是没有它就建不成大楼.而我,白白的把4周的

Node.js中使用redis数据库的正确姿势

Redis是一个常用的Nosql数据库,一般用来代替Memcached做缓存服务,同时它也支持数据的持久化,有着比较广泛的应用场景.在Java中使用redis我们已经比较熟悉了,那么在node.js和koa.js框架中使用Redis的正确姿势是怎样的呢? Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库. Redis 与其他 key - value 缓存产品有以下三个特点: * Redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载

重磅消息!河南省考正确姿势:安心过双节!(推迟后18届毕业生有福!)

重磅消息!河南省考正确姿势:安心过双节!(推迟后18届毕业生有福!) 小可爱们,说想我了没? 肯定想了是吧哈哈 自恋一分钟! 河南省考推迟消息已确定 正确姿势:安心过双节! 各位小伙伴可以愉快的过双节啦! 开心吧! 不信请看:这次小编不骗你啦! 证据

在Linux(ubuntu server)上面安装NodeJS的正确姿势

上一篇文章,我介绍了 在Windows中安装NodeJS的正确姿势,这一篇,我们继续来看一下在Linux上面安装和配置NodeJS. 为了保持一致,这里也列举三个方法 第一个方法:通过官网下载安装 https://nodejs.org/en/download/ 这种方式的问题是我们需要自己去找网页,找到链接,然后下载 第二个方法:使用apt工具进行安装 默认情况下,在apt的源中只有比较老的版本(注意,需要先apt-get update) 例如,如果运行apt-get install nodej

ios监听ScrollView/TableView滚动的正确姿势

主要介绍 监测tableView垂直滚动的舒畅姿势 监测scrollView/collectionView横向滚动的正确姿势 1.监测tableView垂直滚动的舒畅姿势 通常我们用KVO或者在scrollViewDidScroll代理方法中监听ScrollView/TableView的contentOffset,比如监听TableView的contentOffset来设置导航栏的透明度或者拉伸顶部的图片. image image 常见的姿势是在scrollViewDidScroll的代理方法中

使用layoutinflater的正确姿势

使用layoutinflater的正确姿势 一开始接触安卓开发的时候,知道layoutinflater是用来将布局文件生成对应的View.那时候还是懵懵懂懂知道需要传递一个layoutId一个parent参数和一个false参数.那时候就这样用,初初还是好好的.直到后来随着进一步学习安卓开发发现layoutinflater的这两个参数是有大大的门道在里面. 然后这一篇博客可以说是我对layoutinflater使用的一个总结. 怎么添加一个View到ViewGroup? 在讨论怎么使用layou

判断是否为gif/png图片的正确姿势

判断是否为gif/png图片的正确姿势 1.在能取到图片后缀的前提下 1 2 3 4 5 6 7 8 9 //假设这是一个网络获取的URL NSString *path = @"http://pic3.nipic.com/20090709/2893198_075124038_2.gif"; // 判断是否为gif NSString *extensionName = path.pathExtension; if ([extensionName.lowercaseString isEqua