Android:使用android.R.id.content添加片段

Hel*_*ist 5 android android-layout android-fragments android-view

我正在尝试添加一个Fragment来填充Activity的空间(实际上是一个ActionBarActivity,我正在使用appcombat v7),如Android API指南中所示:https://developer.android.com/guide/topics/ui /actionbar.html#Tabs

所以activity类中的相关代码看起来像这样:

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    if(savedInstanceState == null) {
        SomeFragment fragment = new SomeFragment();
        getSupportFragmentManager()
            .beginTransaction()
            .add(android.R.id.content, fragment, fragment.getClass().getSimpleName())
            .commit();
    }
}
Run Code Online (Sandbox Code Playgroud)

很标准的东西.
这个编译没有任何抱怨.. 问题是Fragment根本没有出现,好像Activity没有附加视图.当我用android.R.id.contentXML中定义的另一个布局id 替换并使用setContentView布局资源时片段正确显示.

不应该android.R.id.content将片段添加到默认活动容器/视图中?
我是否需要为我的片段指定一个冗余的中间容器?

Pie*_*ust 2

当尝试将 a 添加PreferenceFragment到 an时,我添加了同样的问题ActionBarActivity:片段根本不显示(它适用于简单的Activity)。

我通过定义一个带有单框架布局的虚拟布局 xml 文件来解决这个问题。然后我用我的片段替换这个布局onCreate

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_settings);

    // Display the fragment as the main content.
    getFragmentManager().beginTransaction()
            .replace(R.id.settings_layout, new SettingsFragment())
            .commit();
}
Run Code Online (Sandbox Code Playgroud)

活动设置.xml:

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/settings_layout"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content">
</FrameLayout>
Run Code Online (Sandbox Code Playgroud)