nat*_*rio 13 android android-lifecycle android-fragments android-activity
我真的很好奇如何确定(来自外部类)是否onCreateView()已经调用了一个片段.我搜索过类似的问题但没有找到.
例如,是fragment.isAdded()一个很好的指标?
我的第一个想法很简单fragment.getView() != null,但我并不是100%肯定它看起来是可靠的,而且我也不太愿意使用它(没有特别的原因,我只是倾向于避免无效检查).我很乐意找到一个解决方法.我的建议:
被添加()
如果片段当前已添加到其活动,则返回true.
在我看来,这条线很模糊; 添加没有附加,但都没有创建.它可能是指FragmentTransaction.add()(这在语义上是错误的,因为你可以<fragment>在你的布局中卡住而不必调用add或replace).
尽管如此,FragmentTransaction.add() 文档没有提供信息也没有让你思考added -> created.我会说不.
ISVISIBLE()
如果片段当前对用户可见,则返回true.这意味着:(1)已添加,(2)其视图附加到窗口,(3)未隐藏.
在某种意义上看起来很好,isVisible() -> isCreated但第三种选择使它成为现实isCreated != isVisible.我只想到一个视图分页器中的片段:并非所有片段都可见,但是当前可见片段附近的片段被添加,创建和存活,您可以调用它们上的方法.但对他们来说,isVisible() == false.这有点太严格了.
isInLayout()
如果布局通过<fragment>标记包含在活动视图层次结构中,则返回true.当通过<fragment>标记创建片段时,这将始终为真,除非旧片段从先前状态恢复且未出现在当前状态的布局中.
我不认为这适用于此.
getView()!= null
返回片段的根视图,如果没有布局,则返回null.
这看起来仍然是唯一的解决方案.我只想确认一下.
实现回调
..被称为onCreateView()或更好onViewCreated().但:
getView != null.Fragment.isAdded()是否暗示已调用onCreateView?
不!不! 暂停 NOOOOOOO00000000000 !!!!!
先生
Fragment.isAdded()是一个通知,您Fragment已添加到您Activity的故事结尾.
该add()方法FragmentTransaction有3种不同的方法,全部添加Fragment到一个Activity,并且,两个进一步创建你的Fragments View并Parent ViewGroup通过LayoutInflater提供你的第一个参数不是0附加到a (id != 0)
要检查是否onCreateView()已被调用,您需要覆盖onViewCreated().
getView()除非onCreateView()完成,否则将始终返回null
你的解决方案是检查 Fragment.isVisible()
仅供参考:我在文档中看到的并没有错.非常明确的先生.
希望我清醒先生
假设
Fragment你对是否可见不感兴趣onCreateView(...)Android 框架是否调用了该方法然后使用
getView() != null
Run Code Online (Sandbox Code Playgroud)
前提是您膨胀布局并返回Viewinside onCreateView(...)。
非 Fragment-API 方法是在 中添加回调onCreate(...),然后在onCreateView()或稍后(在生命周期中)方法中调用该回调。
| 归档时间: |
|
| 查看次数: |
3081 次 |
| 最近记录: |