片段中的onCreate()onCreateView()onActivityCreated()之间有什么区别,它们分别用于什么?

评论

另请参阅:stackoverflow.com/questions/27227906/…

@BradLarson我不明白为什么关闭了它。它被证明是一个相对受欢迎的问题,与您的评论中所述的链接不同。这个问题是在问三种不同方法之间的区别以及它们之间的比较方式,但是您在评论中链接的问题仅提及了这两种方法。

@BradLarson公平,并被发现。现在,尽管我已经了解了,但我是否可以写出一个更好地比较这三种方法的答案,请参考链接以获取更多详细信息?

@ FarbodSalamat-Zadeh-好的。如果您认为可以提供更好的答案,那么我已经重新提出了问题。如果可以的话,我只是不想让它呆着。

#1 楼

更新:
onActivityCreated()已从API级别28开始弃用。

onCreate():
onCreate()Fragment方法在ActivityonAttachFragment()之后但在Fragment的前面被调用onCreateView()
在这种方法中,您可以分配变量,获取Intent额外内容以及不涉及View层次结构的其他任何内容(即非图形初始化)。这是因为在ActivityonCreate()未完成时可以调用此方法,因此尝试在此处访问View层次结构可能会导致崩溃。
onCreateView():
调用onCreate()之后(在Fragment中),调用FragmentonCreateView()。您可以分配View变量并进行任何图形初始化。您应该从此方法返回View,这是主UI视图,但是,如果您的Fragment不使用任何布局或图形,则可以返回null(默认情况下,如果不覆盖,则会发生)。
onActivityCreated():
顾名思义,这是在ActivityonCreate()完成后调用的。它在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()回调后将其删除。 。


详细信息可以在这里找到