onCreate()
,onCreateView()
和onActivityCreated()
之间有什么区别,它们分别用于什么?#1 楼
更新:onActivityCreated()
已从API级别28开始弃用。onCreate():
onCreate()
的Fragment
方法在Activity
的onAttachFragment()
之后但在Fragment
的前面被调用onCreateView()
。在这种方法中,您可以分配变量,获取
Intent
额外内容以及不涉及View层次结构的其他任何内容(即非图形初始化)。这是因为在Activity
的onCreate()
未完成时可以调用此方法,因此尝试在此处访问View层次结构可能会导致崩溃。onCreateView():
调用
onCreate()
之后(在Fragment
中),调用Fragment
的onCreateView()
。您可以分配View
变量并进行任何图形初始化。您应该从此方法返回View
,这是主UI视图,但是,如果您的Fragment
不使用任何布局或图形,则可以返回null
(默认情况下,如果不覆盖,则会发生)。onActivityCreated():
顾名思义,这是在
Activity
的onCreate()
完成后调用的。它在onCreateView()
之后被调用,主要用于最终初始化(例如,修改UI元素)。从API级别28开始不推荐使用。总而言之...
...它们都在
Fragment
中被调用,但是在不同的时间被调用。onCreate()
是首先调用,用于进行任何非图形初始化。接下来,您可以分配并声明要在View
中使用的任何onCreateView()
变量。然后,使用onActivityCreated()
完成所有操作后要进行的任何最终初始化。如果要查看Android官方文档,可以在这里找到:
onCreate()
onCreateView()
onActivityCreated()
_ 关于堆栈溢出,这里也有一些稍有不同,但欠完善的问题/答案:
onCreate()
vs onCreateView()
onCreateView()
vs onActivityCreated()
评论
我以为我会在onCreate()上实现非图形初始化,以便在旋转屏幕时不会再次调用它们。事实证明,我必须调用fragment.setRetainInstance(true),否则在旋转屏幕时会再次调用onCreate()和onCreateView()。
–该死的蔬菜
16-2-13在4:52
在onCreateView()中,访问视图层次结构安全吗?
–科迪
16年4月11日在6:23
但是,活动的onCreate()可能要等到onActivityCreated()之后才能完成?这些是否有可能在onCreateView中崩溃以访问视图层次结构?我不确定onCreateView()/ onActivityCreated()之间有什么区别
–科迪
16-4-11在23:45
(至少使用AppCompatActivity)需要注意的一件事是,当重新创建活动时(例如在最小化和终止活动之后),片段onCreate()将在活动onCreate()和super.onCreate()完成之前被调用。如果您使用的是Dagger之类的东西,并且需要在注入的父活动中访问某些东西,那么这可能是一个问题。一种解决方案是将代码放在onActivityCreated()中,该代码始终被调用,称为onCreate()。
–尼古拉斯
17年7月10日在0:06
假设活动的onFragment的onCreateView被调用后,是否假设活动的onCreate已经完成?
–nullmn
19/12/31在16:48
#2 楼
对于任何寻求简洁的图示答案的人:https://hanaskuliah.wordpress.com/2015/12/07/android-5-development-part-6-fragment /
然后,
评论
同意对于此类事情,Comic Sans是必需的
– Kartik Chugh
18年1月26日在3:19
这是我第一次在同一张图中看到3种不同的字体,现在某种程度上我的生活感觉很完整。
–吉尔·桑德(Gil Sand)
19年2月8日在13:10
片段什么时候才能重新开始?
–索拉布
20-2-14在15:40
一旦流程死了,怎么不重新创建该片段呢? AFAIK,仅将任务状态保留为捆绑包,然后重新创建该应用程序,将其再次置于前台。
–stdout
20-2-29在21:16
#3 楼
onActivityCreated()-不推荐使用onActivityCreated()
现在不推荐使用片段版本1.3.0-alpha02 onActivityCreated()方法现已不推荐使用。接触
片段视图的代码应在onViewCreated()中完成(在onActivityCreated()之前称为
),其他初始化代码
应在onCreate()中进行。要专门在活动的onCreate()完成后接收回调,应在活动的生命周期中的onAttach()中注册一个LifeCycleObserver,并在收到onCreate()回调后将其删除。 。
详细信息可以在这里找到
评论
另请参阅:stackoverflow.com/questions/27227906/…@BradLarson我不明白为什么关闭了它。它被证明是一个相对受欢迎的问题,与您的评论中所述的链接不同。这个问题是在问三种不同方法之间的区别以及它们之间的比较方式,但是您在评论中链接的问题仅提及了这两种方法。
@BradLarson公平,并被发现。现在,尽管我已经了解了,但我是否可以写出一个更好地比较这三种方法的答案,请参考链接以获取更多详细信息?
@ FarbodSalamat-Zadeh-好的。如果您认为可以提供更好的答案,那么我已经重新提出了问题。如果可以的话,我只是不想让它呆着。