Fragment.onCreateView具有null容器

Rol*_*and 10 android android-layout android-fragments

以下是在Android 1.6上运行,因此我使用兼容包进行分片.以下TestFragment是静态嵌套类:

public class FragmentTestActivity extends FragmentActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
}

public static class TestFragment extends Fragment {

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        TextView result = new TextView(getActivity());
        result.setText("Hello TestFragment");
        return result;
    }
}
Run Code Online (Sandbox Code Playgroud)

}

main.xml文件:

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent" android:layout_height="fill_parent">
<fragment class="com.test.FragmentTestActivity$TestFragment"
        android:id="@+id/test"
        android:layout_width="fill_parent" android:layout_height="fill_parent" />
</FrameLayout>
Run Code Online (Sandbox Code Playgroud)

奇怪的是容器参数onCreateViewnull.

现在,如果我以编程方式添加片段(只需更改onCreateActivity 的方法),则容器不再为null.为什么?

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    Fragment frag = new TestFragment();
    getSupportFragmentManager().beginTransaction().add(android.R.id.content, frag).commit();
}
Run Code Online (Sandbox Code Playgroud)

Tim*_*mmm 2

文档提到它可以为空:

public View onCreateView(LayoutInflater充气器,ViewGroup容器,Bundle savingInstanceState)

[...]

容器:如果非 null,则这是片段的 UI 应附加到的父视图。片段不应添加视图本身,但这可以用于生成视图的 LayoutParams。

需要明确的是:你不应该做类似的事情container.addView(...)

  • 但这不是他正在做的事情。他说,当从布局 xml 膨胀时,即使存在包含 Fragment 的父视图,容器也为 null。我认为这种情况不应该发生。 (6认同)