当前位置: 首页 > 知识库问答 >
问题:

onCreateView和onViewCreated在片段中的区别

涂泰平
2023-03-14

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

共有3个答案

闻人飞翼
2023-03-14

最好在创建的视图中为字段指定子视图。这是因为框架为您自动执行空检查,以确保片段的视图层次结构已正确创建和膨胀(如果使用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);
}
长孙明知
2023-03-14

在创建视图(初始化和创建所有对象的方法,包括文本视图)之后立即调用创建的视图,因此这与性能无关。

从开发商网站:

onViewCreated(视图,捆绑保存的InstanceState)

在onCreateView(LayoutInflater、ViewGroup、Bundle)返回后,但在任何保存的状态恢复到视图之前立即调用。这使子类有机会在知道它们的视图层次结构已完全创建后初始化自己。然而,此时片段的视图层次结构并未附加到其父级。

来源:片段#onViewCreated

江文斌
2023-03-14

我们在初始化onCreateView中的视图时会遇到一些崩溃。

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

因为有时视图没有正确初始化。因此,始终在视图创建中使用findViewById(当视图完全创建时),它还将视图作为参数传递。

onViewCreated是确保视图已完全创建。

onViewCreated android文档

在返回onCreateView(android.view.LayoutInflater,android.view.ViewGroup,android.os.Bundle)后,但在将任何保存状态还原到视图之前,立即调用。这使子类有机会在知道其视图层次结构已完全创建后进行初始化。然而,此时片段的视图层次结构并没有附加到其父级。

 类似资料: