为什么没有提供setContentView(View)方法与Fragment一起使用?

时间:2017-08-19 15:49:27

标签: android android-fragments android-activity

我是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但这些仍未回答我的问题。

2 个答案:

答案 0 :(得分:0)

FragmentActivity不一样,同样向View添加ViewGroup与将Activity视图设置为不相似。 Activity是系统通信的应用程序组件之一。但是Fragment有点View,会被添加到ViewGroup中的Activity

Activity不同,FragmentFragmentManager管理,它决定何时创建Fragment视图,销毁视图,将其添加到视图层次结构中类似。

这就是你在falseLayoutInflater#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