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); }
onViewCreated
在onCreateView
(您初始化并创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
返回充气的视图。 OnViewCreated
在onCreateView
之后被调用并且获得具有参数的充气视图。 它的返回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
去。 所有其他性能特征看起来都一样。