我是Android开发的初学者,最近了解了Activity和Fragment。我学到的是,"要为活动设置View
,我们只需在setContentView(View)
方法中调用onCreate(Bundle)
方法即可。在为片段设置View
时,我们需要对视图进行充气,然后从onCreateView(LayoutInflater, ViewGroup, Bundle)
方法返回。"
我想问的是为什么Android决定提供不同的实现来实现类似的任务?据我所知,因为片段的onCreateView(LayoutInflater, ViewGroup, Bundle)
方法是在onAttach
方法之后调用的,所以直接将View
设置为此片段应该没有任何问题(因为它&# 39;已经附加到它的托管活动而不是返回膨胀的View
。
对于一个愚蠢的问题感到抱歉,但我已经阅读了本书" Android编程 - 大书呆子牧场指南中的Android API指南,片段和活动主题。",阅读有关setContentView vs的其他StackOverflow答案inflater.inflate()但是没有找到任何解释这个的文字。
PS:我知道setContentView
做了什么,而LayoutInflater
用于其他方案,例如为View
充气ListView
但这些仍未回答我的问题。
答案 0 :(得分:0)
Fragment
和Activity
不一样,同样向View
添加ViewGroup
与将Activity
视图设置为不相似。 Activity
是系统通信的应用程序组件之一。但是Fragment
有点View
,会被添加到ViewGroup
中的Activity
。
与Activity
不同,Fragment
由FragmentManager
管理,它决定何时创建Fragment
视图,销毁视图,将其添加到视图层次结构中类似。
这就是你在false
中LayoutInflater#inflate()
方法中传递onCreateView
的原因,这意味着我们不允许将Fragment
视图添加到父容器{{1} }}。 ViewGroup
将在适当的时间添加FragmentManager
视图,因此我们只返回一个膨胀的视图。
答案 1 :(得分:0)
活动是用户的第一个可见项。
活动是Android中的单个屏幕。你不能显示多个 活动同时进行。活动只有 基本的东西,如布局充气机,用于充气 XML布局和工具来处理资源,字符串和大多数 你使用的一切。
片段是活动的一部分。
如果没有活动,则无法显示任何片段。你可以显示多个 活动中的碎片。这意味着Activity是一个容器 片段。你从onCreateView()方法得到的充气器是 从活动中传出。碎片可以自定义。
请参阅下面的onCreateView()方法。
@Nullable
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container,
@Nullable Bundle savedInstanceState) {
return null;
}
1)在那里,您将获得用于夸大布局XML文件的活动传递的布局inflater。
2)ViewGroup,这是片段的UI应附加到的父视图。
3)Bundle,在这里你可以处理方向改变事件。它保存数据。
为什么片段没有使用 setConentView 来设置视图。
如上所述,片段是可自定义的,您可以决定膨胀的视图将附加到根视图,或者您将决定它将附加到何处。
您可以在此处了解有关附加到root的更多信息。https://stackoverflow.com/a/44753734/5558150