我怎么知道onCreateView是从外部类调用的?

nat*_*rio 13 android android-lifecycle android-fragments android-activity

我真的很好奇如何确定(来自外部类)是否onCreateView()已经调用了一个片段.我搜索过类似的问题但没有找到.

例如,是fragment.isAdded()一个很好的指标?

我的第一个想法很简单fragment.getView() != null,但我并不是100%肯定它看起来是可靠的,而且我也不太愿意使用它(没有特别的原因,我只是倾向于避免无效检查).我很乐意找到一个解决方法.我的建议:

被添加()

如果片段当前已添加到其活动,则返回true.

在我看来,这条线很模糊; 添加没有附加,但都没有创建.它可能是指FragmentTransaction.add()(这在语义上是错误的,因为你可以<fragment>在你的布局中卡住而不必调用addreplace).

尽管如此,FragmentTransaction.add() 文档没有提供信息也没有让你思考added -> created.我会说不.

ISVISIBLE()

如果片段当前对用户可见,则返回true.这意味着:(1)已添加,(2)其视图附加到窗口,(3)未隐藏.

在某种意义上看起来很好,isVisible() -> isCreated但第三种选择使它成为现实isCreated != isVisible.我只想到一个视图分页器中的片段:并非所有片段都可见,但是当前可见片段附近的片段被添加,创建和存活,您可以调用它们上的方法.但对他们来说,isVisible() == false.这有点太严格了.

isInLayout()

如果布局通过<fragment>标记包含在活动视图层次结构中,则返回true.当通过<fragment>标记创建片段时,这将始终为真,除非旧片段从先前状态恢复且未出现在当前状态的布局中.

我不认为这适用于此.

getView()!= null

返回片段的根视图,如果没有布局,则返回null.

这看起来仍然是唯一的解决方案.我只想确认一下.

实现回调

..被称为onCreateView()或更好onViewCreated().但:

  • 片段创建后我不需要调用某些东西(为什么需要它?),我需要在给定时间检查一些东西;
  • 一个人应该定义相反的,例如onViewNotAvailableAnymore(),以使检查始终有意义;
  • 我不知道这会有什么不同,或者更好getView != null.

Ell*_*ltz 5

Fragment.isAdded()是否暗示已调用onCreateView?

!! 暂停 NOOOOOOO00000000000 !!!!!

先生

Fragment.isAdded()是一个通知,您Fragment已添加到您Activity的故事结尾.

add()方法FragmentTransaction有3种不同的方法,全部添加Fragment到一个Activity,并且,两个进一步创建你的Fragments ViewParent ViewGroup通过LayoutInflater提供你的第一个参数不是0附加到a (id != 0)

要检查是否onCreateView()已被调用,您需要覆盖onViewCreated().

getView()除非onCreateView()完成,否则将始终返回null

你的解决方案是检查 Fragment.isVisible()

仅供参考:我在文档中看到的并没有错.非常明确的先生.

希望我清醒先生

  • 先生有没有考虑过,原来的先生其实是一位女士的可能性? (2认同)

Gun*_*son 5

假设

  • Fragment你对是否可见不感兴趣
  • 你只想知道onCreateView(...)Android 框架是否调用了该方法
  • 你需要使用现有的 Fragment API 方法来找出

然后使用

getView() != null
Run Code Online (Sandbox Code Playgroud)

前提是您膨胀布局并返回Viewinside onCreateView(...)

非 Fragment-API 方法是在 中添加回调onCreate(...),然后在onCreateView()或稍后(在生命周期中)方法中调用该回调。