onCreateView和onView创build片段之间的差异

这两种方法的本质区别是什么? 当我创build一个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); } 

onViewCreatedonCreateView (您初始化并创build所有对象,包括TextView的方法)之后立即调用,因此这不是性能问题。

来自开发者网站:

onViewCreated(查看视图,Bundle savedInstanceState)

onCreateView(LayoutInflater,ViewGroup,Bundle)已经返回,但在任何保存的状态已被恢复到视图之前立即调用。 这使得子类有机会一旦知道他们的视图层次被完全创build,就可以初始化自己。 此时,片段的视图层次结构不会附加到其父项。

onViewCreated字段进行子视图分配会更好。 这是因为框架为你做了一个自动的空检查,以确保你的Fragment的视图层次已经被正确地创build和膨胀(如果使用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); } 

onCreateView返回充气的视图。 OnViewCreatedonCreateView之后被调用并且获得具有参数的充气视图。 它的返回types是void

我们面临一些崩溃在onCreateView初始化视图。

您应该在onCreateView膨胀您的布局,但不应该在onCreateView使用findViewById来初始化其他视图。

因为有时视图没有正确初始化。 所以总是在onViewCreated使用findViewById (当view被完全创build的时候),并且它也传递了view作为参数。

onViewCreated是确保视图完全创build。

onCreateView()是Activity的onCreate()等价片段, 创build视图时运行。
onViewCreated() 创buildView 之后运行。

should I use one over the other for performance? NO 。 没有提高性能的证据。

Framents中实际上也有一个onCreate()方法。

很less使用(我从来不使用它,也没有find一个好的使用案例)。
我总是在片段中使用onCreateView()作为onCreate()的替代。
我对此感到高兴。

onCreateView用于片段来创build布局和充气视图。 onViewCreated用于引用由上述方法创build的视图。 最后,在onActivityCreated中定义动作监听器是一个好习惯。

我将使用onViewCreated是因为它分离任何初始化逻辑从视图层次膨胀/创build逻辑应该在onViewCreate去。 所有其他性能特征看起来都一样。