Android 片段 onCreateView 与 onActivityCreated

Posted

技术标签:

【中文标题】Android 片段 onCreateView 与 onActivityCreated【英文标题】:Android Fragment onCreateView vs. onActivityCreated 【发布时间】:2011-12-23 21:09:18 【问题描述】:

我知道片段的视图层次结构必须在 onCreateView 中膨胀,但是 onCreateView 中可以有哪些其他功能与应该等待 onActivityCreated 什么?我当前的实现对所有内容都使用单独的活动,典型的活动在其 onCreate 方法中完成大部分工作,包括膨胀视图、设置内容视图、使用数据初始化各种小部件、设置侦听器等。

那么这可能全部移到 onCreateView 中,还是应该将某些函数放入 onActivityCreated 方法中?

【问题讨论】:

【参考方案1】:

如果您的视图是静态的,则无需将任何代码移至 onActivityCreated 方法。但是,例如,当您从适配器填充一些列表时,您应该在 onActivityCreated 方法中执行此操作,并在 setRetainInstance 曾经这样做时恢复视图状态。

同样访问父Activity的视图层次必须在onActivityCreated中完成,不能越早。

【讨论】:

为什么在“静态”的情况下不需要它?似乎每个人都得到了这个,但我没有。 不要以为每个人都明白,Diffy,但他们只是对答案很满意 :) @Diffy,他所说的静态视图是指向用户显示的视图只不过是膨胀的 xml 布局。编码或运行时无需修改。 @vitakot 您能否详细说明适配器用例中的列表。为什么不能放 onCreateView? 很好的答案,但如果您可以@vitakot 解释为什么我们需要使用 onActivityCreated 方法将数据从适配器填充到 listview/reyclerview 中,它会更有帮助。【参考方案2】:

onActivityCreated() 是 deprecated in fragment 1.3.0-alpha02,建议改用 onViewCreated()。此处已经创建了 View,您可以设置监听器、从 ViewModel 观察 LiveData、初始化 recyclerView 等。

为了更好地理解,你可以看看我的博文,我在 137 秒内描述了android Fragment lifecycle。

【讨论】:

以上是关于Android 片段 onCreateView 与 onActivityCreated的主要内容,如果未能解决你的问题,请参考以下文章

Android Java:在 onCreateView() 中返回空视图的片段

如何防止在android片段中按下后退按钮时调用onCreateView

Android选项卡片段不调用OnCreateView从tab2切换到tab1

Android 片段生命周期

再次调用“onCreateView” - Android

多次调用片段 onCreateView