Smi*_*ith 99 android android-layout android-fragments
这两种方法之间的本质区别是什么?当我创建TextView时,我应该使用其中一个来提高性能吗?
编辑:有什么区别
onCreateView() {
root = some view
View v = new View(some context);
root.add(v);
return root;
}
onViewCreated() {
View v = new View(some context);
getView().add(v);
}
Run Code Online (Sandbox Code Playgroud)
Xar*_*mer 62
我们面临一些初始化视图的崩溃onCreateView
.
您应该夸大布局,
onCreateView
但不应使用findViewById
in 初始化其他视图onCreateView
.
因为有时候视图没有正确初始化.因此请务必使用findViewById
在onViewCreated
(当完全创建视图),也传递视图参数.
onViewCreated
确保完全创建视图.
u3l*_*u3l 36
onViewCreated
之后立即调用onCreateView
(初始化和创建所有对象的方法,包括你的方法TextView
),所以这不是性能问题.
来自开发者网站:
onViewCreated(视图视图,Bundle savedInstanceState)
在onCreateView(LayoutInflater,ViewGroup,Bundle)之后立即调用,但在将任何已保存的状态恢复到视图之前.这使得子类有机会在知道自己的视图层次结构已完全创建后进行初始化.但是,此时片段的视图层次结构不会附加到其父级.
ora*_*ako 25
最好将子视图分配到字段中onViewCreated
.这是因为框架会对您执行自动空检查,以确保您的Fragment视图层次结构已正确创建和膨胀(如果使用XML布局文件).
代码片段:FragmentManger.java
// This calls onCreateView()
f.mView = f.performCreateView(f.getLayoutInflater(f.mSavedFragmentState), null, f.mSavedFragmentState);
// Null check avoids possible NPEs in onViewCreated
// It's also safe to call getView() during or after onViewCreated()
if (f.mView != null) {
f.mView.setSaveFromParentEnabled(false);
if (f.mHidden) f.mView.setVisibility(View.GONE);
f.onViewCreated(f.mView, f.mSavedFragmentState);
}
Run Code Online (Sandbox Code Playgroud)
Fan*_*mas 16
onCreateView()
是 Fragment 等价onCreate()
于活动并在视图创建期间运行。创建视图后
onViewCreated()
运行。
should I use one over the other for performance?
否。没有性能提升的证据。
onCreate()
Fragments 中实际上也有一个方法,但它很少使用(我从不使用它,也没有找到很好的用例)。
我总是onCreateView()
在 Fragments 中使用作为onCreate()
.
我对此很满意。
Bla*_*elt 12
onCreateView
返回膨胀的视图.OnViewCreated
刚刚调用后onCreateView
得到参数的膨胀视图.它的返回类型是void
Pep*_*L-G 12
Fragment.onCreateView()
现在的文档说:
建议只在此方法中对布局进行膨胀,并将对返回的 View 进行操作的逻辑移动到 onViewCreated(View, Bundle)。
我们不需要理解为什么;我们只需要按照文档说的去做,但是知道为什么存在这个建议会很有趣。我最好的猜测是关注点分离,但恕我直言,这使它比它必须的复杂一点。
小智 8
好的,如果我们要讨论onCreateView()
和onViewCreated()
。值得讨论一下片段生命周期。有关片段生命周期的完整文档可以在这里找到,我建议您阅读它,因为我们只会讨论与onCreateView()
和相关的状态onViewCreated()
。
Fragment 生命周期包含 5 个状态:
1) 初始化
2) 已创建
3)开始
4) 恢复
5) 被毁
我们需要讨论片段生命周期的原因是因为 和onCreateView()
都在生命周期的状态onViewCreated()
期间被调用。CREATED
因此,当实例化片段时,它会从INITIALIZED
状态开始,例如当您看到:
CustomFragment frag1 = new CustomFragment() //`INITIALIZED` state
CustomFragment.class //`INITIALIZED` state
Run Code Online (Sandbox Code Playgroud)
语法.class
就是class literal
语法,为了进行简要总结,我建议阅读此处的博客文章
为了使片段转换到其他生命周期状态,必须将其添加到Fragment Manager
.
片段管理器负责确定其片段应处于什么状态,然后将它们移动到该状态。
一旦片段被添加到片段管理器,onAttach()
就会调用将片段附加到主机活动。
一旦onAttch()
被调用,片段就进入状态CREATED
。Android 系统正是在这种状态下开始创建fragment 的视图。这可以通过几种方式完成,例如文档指出:
在大多数情况下,您可以使用采用 @LayoutId 的片段构造函数,它会在适当的时间自动膨胀视图。您还可以重写 onCreateView() 以编程方式膨胀或创建片段的视图
onCreateView()
发现:建议仅在此方法中膨胀布局,并将对返回的 View 进行操作的逻辑移至 onViewCreated
onCreateView()
都在片段生命周期的状态onViewCreated()
期间被调用。CREATED
但是,onCreateView()
首先被调用,并且只能用于扩展片段的视图。onViewCreated()
第二个被调用,所有与膨胀视图上的操作相关的逻辑都应该在这个方法中。 归档时间: |
|
查看次数: |
71696 次 |
最近记录: |