是 Android Fragments View 还是 ViewGroup

Posted

技术标签:

【中文标题】是 Android Fragments View 还是 ViewGroup【英文标题】:Are Android Fragments View or ViewGroup 【发布时间】:2016-01-10 07:16:26 【问题描述】:

正如问题所述,android 中的 Fragments 是 View 或 ViewGroup。谁能解释一下

这里是来自docs的Fragment的onCreateView方法

public static class ExampleFragment extends Fragment 
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) 
        // Inflate the layout for this fragment
        return inflater.inflate(R.layout.example_fragment, container, false);
    

传递给onCreateView()的container参数是父级 ViewGroup(来自活动的布局)您的片段布局 将被插入

要为您的片段绘制 UI,您必须从这里返回一个视图 作为片段布局根的方法。

【问题讨论】:

它不是 View 或 ViewGroup。它是一个 Object,它的一个属性是 ViewGroup。 啊碎片,开发中的第一个主要思维障碍,您编写的方法返回一个曾经放在屏幕上的视图。在幕后,Fragment 类处理容器参数是什么,(不要引用我的话,但我认为它与 FragmentTransaction 有关。)。 【参考方案1】:

您不能将片段定义为视图或视图组。片段不止于此。可视化片段的最简单方法是将它们视为具有自己的 xml 外观、具有自己的生命周期回调的自己的行为的活动块。它们总是运行在 Activity 之上,您可以在运行时对它们执行添加、替换等操作。这样您就可以有效地在布局之间切换。 要了解onCreateView 方法,请考虑以下解释:

public View onCreateView(LayoutInflater inflater,ViewGroup container,Bundle savedInstanceState)
         View view =inflater.inflate(R.layout.example_fragment, container, false);
      return view;

    

这将返回单个 View 对象,始终是 ViewGroup,其中包含定义 Fragment 的 UI 的 View 对象集。 Activity 在 Fragment 提供其 UI 以供显示时调用此事件处理程序。

【讨论】:

【参考方案2】:

fragment 是与主机活动生命周期相关的自定义视图的包装器。

【讨论】:

【参考方案3】:

Fragment 是一种不占用全屏的 Activity,它可以将屏幕分割成多个 Fragment,因此非常适用于手机和平板电脑。

【讨论】:

是的,您对片段的使用是正确的。但我想知道它们是 View 还是 ViewGroup【参考方案4】:

我认为不是,activity(fragment)控制视图显示什么,viewGroup扩展视图并实现ViewManger。只有Activity加载相关视图才能手机显示布局。Activity是一个组,视图可以在这个容器中正常工作

【讨论】:

【参考方案5】:

两者都没有。 Fragment 是一个基类。

来自https://developer.android.com/guide/components/fragments.html

Fragment 代表用户界面的一个行为或一部分 一个活动

Fragment 包含一个字段:

// The View generated for this fragment.
View mView;

onCreateView 中生成,实现:

@Nullable
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container,
        Bundle savedInstanceState) 
    return null;

所以如果你想要一个Fragment 和一个View 然后@Override 那个方法。然后,如果您使用来自Activity 或嵌套Fragment 的适当片段事务,则可以向用户显示Fragment

【讨论】:

以上是关于是 Android Fragments View 还是 ViewGroup的主要内容,如果未能解决你的问题,请参考以下文章

Fragments的初识---不知道Fragments的不是合格的android开发

原因:android.view.InflateException: Binary XML file line #11: Error inflating class fragment

Android Fragment使用 嵌套Fragments (Nested Fragments) 的使用及常见错误

在 Android 中使用 Fragments 而不是 Views 有啥好处?

Android Fragment使用 嵌套Fragments (Nested Fragments) 的使用及常见错误

Android - android.view.InflateException: Binary XML file line #8: Error inflating class fragment