Android PreferenceFragment加载时没有错误,但屏幕为空

Android PreferenceFragment加载时没有错误,但屏幕为空,android,android-layout,android-fragments,android-support-library,android-support-design,Android,Android Layout,Android Fragments,Android Support Library,Android Support Design,我试图实现从AppCompatActivity(或常规活动)加载的PreferenceFragment,我似乎已经让它进入PreferenceFragment的onCreate方法,但屏幕显示为空白。下图: 我有一种感觉,片段正在布局后面加载,但我不知道如何检查这一点,因为即使在带有单个FrameLayout的空活动布局上运行它,我也会得到类似的行为。我正在尝试使用OnOptions Selected()从我的Main中显示设置页面 我已经被困在这个问题上一个星期了,我发现没有一个答案是有帮助

我试图实现从AppCompatActivity(或常规活动)加载的PreferenceFragment,我似乎已经让它进入PreferenceFragment的onCreate方法,但屏幕显示为空白。下图:

我有一种感觉,片段正在布局后面加载,但我不知道如何检查这一点,因为即使在带有单个FrameLayout的空活动布局上运行它,我也会得到类似的行为。我正在尝试使用OnOptions Selected()从我的Main中显示设置页面

我已经被困在这个问题上一个星期了,我发现没有一个答案是有帮助的,任何帮助都将不胜感激

以下是我的活动代码:

public class genericActivity extends AppCompatActivity {

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    Log.d(Main.appTAG, "onCreate: settings activity");
    setContentView(R.layout.activity_generic);
    // IF intent message == settings
    final Fragment settingsFragment = new SettingsFragment();
    getFragmentManager()
            .beginTransaction()
            .replace(R.id.fragmentParent, settingsFragment)
            .addToBackStack(null)
            .commit();
    getFragmentManager().addOnBackStackChangedListener(
            new FragmentManager.OnBackStackChangedListener() {
                @Override
                public void onBackStackChanged() {
                    getFragmentManager()
                            .beginTransaction()
                            .remove(settingsFragment)
                            .commit();
                }
            });

  }

}
活动(即Activity_generic.xml)的布局如下所示

<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
tools:context="com.thesis.deefunkt.thesispractise.genericActivity">


<android.support.design.widget.AppBarLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:theme="@style/AppTheme.AppBarOverlay">

    <android.support.v7.widget.Toolbar
        android:id="@+id/toolbar"
        android:layout_width="match_parent"
        android:layout_height="?attr/actionBarSize"
        android:background="?attr/colorPrimary"
        app:popupTheme="@style/AppTheme.PopupOverlay" />



</android.support.design.widget.AppBarLayout>


<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    android:id="@+id/fragmentParent"
    android:fitsSystemWindows="true">

    <ListView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@android:id/list">

    </ListView>

</LinearLayout>

</android.support.design.widget.CoordinatorLayout>
在运行时,我有一堆日志条目,我不知道如何解释:

D/com.deefunkt.UsbComms: onCreate: settings activity
D/PhoneWindow: *FMB* installDecor mIsFloating : false
D/PhoneWindow: *FMB* installDecor flags : -2139029248
D/AbsListView: Get MotionRecognitionManager
D/Activity: performCreate Call Injection manager
W/Resources: Converting to string: TypedValue{t=0x10/d=0x2580 a=-1}
W/Resources: Converting to string: TypedValue{t=0x10/d=0x8 a=-1}
W/Resources: Converting to string: TypedValue{t=0x10/d=0x1 a=-1}
W/Resources: Converting to string: TypedValue{t=0x10/d=0x0 a=-1}


D/com.deefunkt.UsbComms: onCreate: SettingsFragment 
I/InjectionManager: dispatchPreferences > Target : com.thesis.deefunkt.thesispractise.SettingsFragment
D/AbsListView: Get MotionRecognitionManager
I/InjectionManager: dispatchOnViewCreated > Target : com.thesis.deefunkt.thesispractise.SettingsFragment isFragment :true
I/InjectionManager: dispatchOnViewCreated > Target : com.thesis.deefunkt.thesispractise.genericActivity isFragment :false
D/SecWifiDisplayUtil: Metadata value : SecSettings2
D/PhoneWindow: *FMB* isFloatingMenuEnabled mFloatingMenuBtn : null
D/PhoneWindow: *FMB* isFloatingMenuEnabled return false
D/SRIB_DCS: log_dcs ThreadedRenderer::initialize entered! 
D/mali_winsys: new_window_surface returns 0x3000,  [1440x2560]-format:1
D/OpenGLRenderer: endAllStagingAnimators on 0x7f65c06600 (RippleDrawable) with handle 0x7f74cff540
如您所见,片段中的onCreate方法被调用,但我不知道如何处理此日志数据


提前谢谢

好吧,在花了这么多时间之后,我终于修复了这个bug,但我不知道为什么。我最好的猜测是

getFragmentManager()
        .beginTransaction()
        .replace(R.id.fragmentParent, settingsFragment)

/*Adding to the backStack here and then setting a backStack Listener
 *on the next step made it add the fragment then immediately take it     
 *off, giving my empty activity layout.*/

        .addToBackStack(null)
        .commit();
getFragmentManager().addOnBackStackChangedListener(
        new FragmentManager.OnBackStackChangedListener() {
            @Override
            public void onBackStackChanged() {
                getFragmentManager()
                        .beginTransaction()
                        .remove(settingsFragment)
                        .commit();
            }
        });

我删除了对addToBackStack()的调用,并注释掉了backStack侦听器,因为我意识到,在活动加载后,我不需要删除片段,我只关心将活动重新用于多个片段。

使用框架布局来膨胀片段,而不是活动的根布局。另外,由于您使用的是AppCompativeActivity抱歉,您是说我应该使用FrameLayout(但在activity_generic.xml中)而不是LinearLayout,还是应该创建一个包含单个FrameLayout的新xml文件?我想既然我们已经定义了包含xml文件的首选项对象,这就是片段使用的布局,我们只需传递一个容器将其放入其中?您将不得不重构代码。。。如果您使用的是片段,那么活动布局中不应包含任何内容,而应将内容放在片段膨胀的框架布局中
getFragmentManager()
        .beginTransaction()
        .replace(R.id.fragmentParent, settingsFragment)

/*Adding to the backStack here and then setting a backStack Listener
 *on the next step made it add the fragment then immediately take it     
 *off, giving my empty activity layout.*/

        .addToBackStack(null)
        .commit();
getFragmentManager().addOnBackStackChangedListener(
        new FragmentManager.OnBackStackChangedListener() {
            @Override
            public void onBackStackChanged() {
                getFragmentManager()
                        .beginTransaction()
                        .remove(settingsFragment)
                        .commit();
            }
        });