Fragment的onCreateView和onActivityCreate之间的区别(转)
看了有关这个问题的几篇博文,几乎都是引用了stackoverflow上的一个回答;
问题:
I know that a fragment’s view hierarchy has to be inflated in onCreateView, but what other functionality can be in onCreateView vs. what should wait for onActivityCreated? My current implementation uses separate activities for everything, and a typical activity does most of its work in its onCreate method, including inflating the view, setting the content view, initializing the various widgets with data, setting up listeners, etc.
大概意思就是:哪些代码应该在onCreateView()执行哪些应该在onActivityCreate()中执行;
回答:
If your view is static, then moving any code to the onActivityCreated method is not necessary. But when you - for instance, fill some lists from the adapter, then you should do it in the onActivityCreated method as well as restoring the view state when setRetainInstance used to do so.
Also accessing the view hierarchy of the parent activity must be done in the onActivityCreated, not sooner.
大概意思就是:如果您的View是静态的,那么就没有必要在onActivityCreate()中执行;如果您的View是动态的,比如使用ListView等需要Adapter填充的,View就需要在onActivityCreate()中执行。(静态的View不是指Static View,而是指后期不需要修改的View)
个人理解:
onCreateView():
这个方法就相当于Activity onCreate()方法中的 setContentView()是进行XML视图填充的,这也是为什么setContentView()这个方法几乎要写在onCreate()方法的第一行的原因,因为如果XML视图还没填充,我们就没有办法对每个View进行操作,所以我们在每个Fragment中对每个View进行操作的时候都必须在onCreateView()后面执行。
onActivityCreate():
这个相当于Activity中 onCreate()中 setContentView()这句话后面的代码。
这里可能就有人会想了: 那我完全可以把 对每个View操作的代码放在onCreateView()代码块结尾处写啊,完全没必要分开到onActivityCreate()中写啊,分开写反而让人更容易模糊。
个人理解:
1. 一个是单一原则,能引起一个方法改变的原因只能有一个,onCreateView()只负责视图填充,onActivityCreate()负责对视图修改,如果你的视图不需要修改那就放在onCreateView()中写吧。 当然这个说法不是特别站得住脚。不过还是能帮助记忆的。
最后加上一句刚从stackoverflow上学到的一句话
Don’t think everyone got it, Diffy, but they were just happy with the answer
不要认为每个人都懂了,只是他们对答案满意了
如果您看了这篇博客您觉得我说的对,请您不要以为您懂了,因为这是您对这个答案满意了
---------------------
作者:maxcion
来源:CSDN
原文:https://blog.csdn.net/maxcion/article/details/77906982
版权声明:本文为博主原创文章,转载请附上博文链接!
Fragment的onCreateView和onActivityCreate之间的区别(转)的更多相关文章
- Statement和PreparedStatement之间的区别
Statement和PreparedStatement之间的区别: 1.PreparedStatement是预编译的,对于批量处理可以大大提高效率. 也叫JDBC存储过程2.使用 Statement ...
- MySQL、MongoDB、Redis 数据库之间的区别与使用(本章迭代更新)
MySQL.MongoDB.Redis 数据库之间的区别与使用 MySQL.MongoDB.Redis 数据库之间的区别与使用(本章迭代更新) update:2019年2月20日 15:21:19(本 ...
- select、poll、epoll之间的区别总结
select.poll.epoll之间的区别总结 05/05. 2014 select,poll,epoll都是IO多路复用的机制.I/O多路复用就通过一种机制,可以监视多个描述符,一旦某个描述符就绪 ...
- 你真的会玩SQL吗?EXISTS和IN之间的区别
你真的会玩SQL吗?系列目录 你真的会玩SQL吗?之逻辑查询处理阶段 你真的会玩SQL吗?和平大使 内连接.外连接 你真的会玩SQL吗?三范式.数据完整性 你真的会玩SQL吗?查询指定节点及其所有父节 ...
- [转]ExtJs基础--Html DOM、Ext Element及Component三者之间的区别
要学习及应用好Ext框架,必须需要理解Html DOM.Ext Element及Component三者之间的区别. 每一个HTML页面都有一个层次分明的DOM树模型,浏览器中的所有内容都有相应的DOM ...
- iOS中assign,copy,retain之间的区别以及weak和strong的区别
@property (nonatomic, assign) NSString *title; 什么是assign,copy,retain之间的区别? assign: 简单赋值,不更改索引计数(Refe ...
- javascrip中parentNode和offsetParent之间的区别
首先是 parentNode 属性,这个属性好理解,就是在 DOM 层次结构定义的上下级关系,如果元素A包含元素B,那么元素B就可以通过 parentElement 属性来获取元素A. 要明白 off ...
- 面试问题5:const 与 define 宏定义之间的区别
问题描述:const 与 define 宏定义之间的区别 (1) 编译器处理方式不同 define宏是在预处理阶段展开: const常量是编译运行阶段使用: (2) 类型和安全检查不同 ...
- 关于背景图相对父容器垂直居中问题 —— vertical-align 和 line-height 之间的区别
html css <div class="register-wrapper"> <div class="register"> &l ...
随机推荐
- 比较好的一些 ConcurrentHashMap讲解博客
jdk8 https://blog.csdn.net/jianghuxiaojin/article/details/52006118#commentBox jdk7.8 https://crossov ...
- Directional RNA-seq data -which parameters to choose?
Directional RNA-seq data -which parameters to choose? REF: https://chipster.csc.fi/manual/library-ty ...
- Linux/shell: Concatenate multiple lines to one line
$ cat file START Unix Linux START Solaris Aix SCO 1. Join the lines following the pattern START with ...
- Vue.directive自定义指令
Vue除了内部指令,我们也可以定义一些属于自己的指令,比如我们要定义一个v-diy的指令,作用就是让文字变成红色. 写好了这个功能,我们现在就自己定义一个全局的指令.我们这里使用Vue.directi ...
- Leetcode121-Best Time to Buy and Sell Stock I - Easy
I Say you have an array for which the ith element is the price of a given stock on day i. If you wer ...
- Python 爬取 猫眼 top100 电影例子
一个Python 爬取猫眼top100的小栗子 import json import requests import re from multiprocessing import Pool #//进程 ...
- 阿里巴巴数据库连接池 druid配置详解
一.背景 java程序很大一部分要操作数据库,为了提高性能操作数据库的时候,又不得不使用数据库连接池.数据库连接池有很多选择,c3p.dhcp.proxool等,druid作为一名后起之秀,凭借其出色 ...
- 获取指定tag的代码
git checkout v1.0.3 再使用ls查看就可以了
- python os.remove
remove 只能删除文件,删除目录会报错 >>> import os >>> os.remove("/opt/xxx/server_log/test&q ...
- requests:json请求中中文乱码处理
requests库中,在处理json格式的请求时调用的json.dumps方法参数ensure_ascii默认为True.表示序列化时对中文默认使用的ascii编码.如果想要显示中文,则将此参数的值改 ...