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

时间:2014-11-26 18:43:46

标签: android android-layout android-fragments android-view

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

因此,活动类中的相关代码如下所示:

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();
    }
}

非常标准的东西。这个编译没有任何投诉。
问题是片段根本没有出现,好像Activity没有附加任何视图。当我用XML中定义的另一个布局ID替换android.R.id.content时,使用setContentView和布局资源片段出现正确。

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

1 个答案:

答案 0 :(得分:2)

我在尝试向PreferenceFragment添加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();
}

activity_settings.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>