Android Fragment的onCreateView和onActivityCreated有什么区别?

75
我知道一个 Fragment 的视图层次结构必须在 onCreateView 中进行充气,但除此之外,什么其他功能可以放在 onCreateView 中,而哪些应该等待 onActivityCreated? 我目前的实现为每个东西都使用单独的 activity,并且典型的 activity 在其 onCreate 方法中完成大部分工作,包括充气视图、设置内容视图、用数据初始化各种小部件、设置监听器等等。
因此,这些功能可能都可以移动到 onCreateView 中,还是某些函数应该放到 onActivityCreated 方法中呢?
2个回答

77
如果您的视图是静态的,那么将任何代码移动到onActivityCreated方法中是不必要的。但是当您 - 例如,从适配器填充某些列表时,应该在onActivityCreated方法中执行此操作以及在使用setRetainInstance进行视图状态恢复时。此外,访问父活动的视图层次结构必须在onActivityCreated中完成,而不能提前进行。

为什么在“静态”情况下不需要它?似乎每个人都懂,但我不懂。 - Diffy
6
Diffy,不要认为每个人都理解了,但他们对答案感到满意就好了 :) - Boy
7
@Diffy,他所说的静态视图是指向用户显示的视图仅是充气的XML布局。没有在编码或运行时进行修改。 - Hamzeh Soboh
3
@vitakot,您能否详细说明一下适配器用例中的列表?为什么不能在onCreateView中放置? - lujop
1
非常好的回答,但如果您能够解释为什么我们需要在适配器中填充数据到listview/reyclerview时使用onActivityCreated方法,那将更有帮助。@vitakot - user3189761

3

onActivityCreated() 已在 fragment 1.3.0-alpha02 中被弃用,建议使用 onViewCreated() 替代。视图已经创建完成,您可以在此处设置监听器、观察来自 ViewModel 的 LiveData、初始化 recyclerView 等。

为了更好的理解,您可以查看我的博客文章,其中我在 137 秒内描述了 Android Fragment 生命周期


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接