1

假设 anActivity仅包含一个Fragment,并且 的视图由以下Fragment方式创建:

public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    super.onCreateView(inflater, container, savedInstanceState);
    return inflater.inflate(R.layout.fragment, container, false);
}

然后 Fragment 的根视图(由 返回onCreateView)应附加到封闭的 Activity。

问题:

  1. Activity 和 Fragment 之间的视图层次结构中有多少层?我是说:

    <Activity View> -> <Fragment View>
    

    或者

    <Activity View> -> <Some ViewGroup> -> <Fragment View>
    

    在我的测试中onCreateViewViewGroup containernull。为什么是这样?

  2. 如果我都定义在activity_main.xml

    <fragment
        android:id="@+id/fragment_foo"
        />
    

    并且在fragment_foo.xml(假设ListView是这个片段中的根视图元素):

    <ListView
        android:id="@+id/listview_foo"
        />
    

    那么片段的根视图的 id 是什么,fragment_foo或者listview_foo

    我的测试结果是前者。这个结果是预期的吗?这是否意味着我们永远不应该设置片段布局的根元素的 id(因为它无论如何都不会被使用)?

  3. 由于片段的视图层次结构连接到封闭活动的视图层次结构,因此两者都应该在片段中找到视图:

    getActivity().findViewById()
    

    getView().findViewById()
    

    这个对吗?

4

1 回答 1

2

您可以使用Hierarchy Viewer(在模拟器上运行)来解决这个问题(任何其他布局问题/问题)。它将向您显示 Activity 的确切视图结构。

于 2013-06-30T05:40:21.747 回答