gpt4 book ai didi

android - 当 Fragment onActivityCreated 调用时

转载 作者:行者123 更新时间:2023-12-02 18:39:40 28 4
gpt4 key购买 nike

在 Google 架构组件和 LiveData 之前,我没有关注过 onActivityCreated() 回调。我在 SOF 以及文档中读到了这一点,但我仍然无法理解这种行为。

摘自 SOF 答案之一:

As the name states, this is called after the Activity's onCreate() hascompleted.

  • 在什么情况下onActivityCreated()被调用以及什么时候onActivityCreated()不被调用

  • 是否有可能调用了 onCreateView() 但未调用 onActivityCreated()

onActivityCreated()中附加LiveData观察者是常见的做法,所以我猜onActivityCreated()之间存在显着差异>onCreateView()

尽管从官方 Android 文档中查看图表,似乎 onActivityCreated()onCreateView() 之后被调用 always(就以下而言)执行,而不是顺序)没有区别吗?

这里有些令人困惑的事情。

enter image description here

更新:onActivityCreated() 已弃用。

最佳答案

编辑:根据 Ian Lake 在 Twitter 上的说法(参见 https://twitter.com/ianhlake/status/1193964829519667202 ),事实上 FragmentActivity尝试发送onActivityCreatedonStart无关紧要,因为无论发生什么,FragmentManager 在从 onCreate 开始时都会调度它。至onStart .

            case Fragment.CREATED:
// We want to unconditionally run this anytime we do a moveToState that
// moves the Fragment above INITIALIZING, including cases such as when
// we move from CREATED => CREATED as part of the case fall through above.
if (newState > Fragment.INITIALIZING) {
fragmentStateManager.ensureInflatedView();
}
if (newState > Fragment.CREATED) {
fragmentStateManager.createView(mContainer);
fragmentStateManager.activityCreated(); // <--
fragmentStateManager.restoreViewState();

所以我下面说的其实是错误的。

显然使用onActivityCreated在 Fragment 内相当于使用 onViewCreated .

但这也意味着您不应该依赖 onActivityCreated了解您的 Activity 是否实际创建,因为它被调用的次数比 Activity 实际创建时的调用次数要多。

fragment 令人困惑。

<小时/><小时/>

原始答案:

Is it possible that onCreateView() called but onActivityCreated() not called?

更新:不,这是不可能的。

原文:是的,在FragmentPagerAdapter中他们使用FragmentTransaction.detach/FragmentTransaction.attach ,这会导致 View 被销毁,但 Fragment 仍保持 Activity 状态(已停止,但未销毁)。

在本例中,.attach()运行onCreateView ,但不是onActivityCreated .

It's common practice to attach LiveData observers in onActivityCreated(), so i guess there are significant difference between onActivityCreated() and onCreateView()?

更新:没关系,尽管 onViewCreated还是比较清楚

原文:这实际上是一种不好的做法,应该在onViewCreated中完成,提供getViewLifecycleOwner()作为生命周期所有者。

Although looking on the diagram from official Android docs seems like it onActivityCreated() is called always after onCreateView() and there no diffrence?

更新:尽管 FragmentActivity只尝试分派(dispatch)一次,所有 fragment 总是经过 onActivityCreated ,因为这就是 FragmentManager 的工作原理。

原文:它并不总是在 onCreateView 之后调用。 ,事实上,它更确切地说是“在 onStart 之前,但仅一次”。

/**
* Dispatch onStart() to all fragments.
*/
@Override
protected void onStart() {
super.onStart();

mStopped = false;

if (!mCreated) {
mCreated = true;
mFragments.dispatchActivityCreated(); // <---
}

mFragments.noteStateNotSaved();
mFragments.execPendingActions();

// NOTE: HC onStart goes here.

mFragments.dispatchStart();
}

更新:但显然这对 FragmentManager 来说并不重要,因为它是 CREATED -> ACTIVITY_CREATED -> STARTED无论哪种方式。

关于android - 当 Fragment onActivityCreated 调用时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58737773/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com