Android 弹回后的碎片空白

Android 弹回后的碎片空白,android,android-fragments,android-navigation,Android,Android Fragments,Android Navigation,在这个活动中,我用一个偏好片段替换主片段。当我在查看首选项后单击“上一步”时,我会得到一个空白(白色)区域,其中应该是我的片段。如果我旋转屏幕,它就可以正常工作。我的片段中的所有内容看起来都正常,只是它是空白的。以下是我的方法: 活动的onCreate方法 @Override protected void onCreate(Bundle savedInstanceState) { ..... if (savedInstanceState == nul

在这个活动中,我用一个偏好片段替换主片段。当我在查看首选项后单击“上一步”时,我会得到一个空白(白色)区域,其中应该是我的片段。如果我旋转屏幕,它就可以正常工作。我的片段中的所有内容看起来都正常,只是它是空白的。以下是我的方法:

活动的onCreate方法

 @Override
    protected void onCreate(Bundle savedInstanceState) {
          .....
        if (savedInstanceState == null) {

          getFragmentManager().beginTransaction()
                    .add(MAIN_CONTAINER, new MainFragment())
                    .commit();
        }
    }
首选项片段的开头:

public void startPreferencesFragment() {
        FragmentManager mFragmentManager = getFragmentManager();
        FragmentTransaction mFragmentTransaction = mFragmentManager
                .beginTransaction();
        MyPreferencesFragment mPrefsFragment = new MyPreferencesFragment();
        mFragmentTransaction.addToBackStack(null)
                .replace(MAIN_CONTAINER, mPrefsFragment)
                .commit();
    }
我的活动内容如下:

@Override
    public void onBackPressed() {

        FragmentManager fm = getFragmentManager();

        if (fm.getBackStackEntryCount() > 0) {
            fm.popBackStack();

            return;

        }else {
            super.onBackPressed();
        }
    }
那么我做错了什么

谢谢

编辑:如果我打开“首选项”,然后旋转,然后按“上一步”,一切正常

我还应该提到,删除onBackPressed方法并不能解决问题,它只是退出应用程序。


编辑:事实证明,片段后堆栈根本没有问题。基本上,我的片段有一个recyclerview,这就是它的全部。我在recyclerview上设置的适配器实例被保留,而当片段从后堆栈中带回来时,recyclerview本身是新的,并且我在设置它时检查适配器是否为null

您已经将事务添加到backback,不需要覆盖
onBackPressed()
;按下后退按钮时,框架将自动将
片段弹出堆栈。我很确定你是在“双重”的背后

我试过了,但没试过,应用程序就退出了。我还应该提到,如果我打开设置屏幕然后旋转,后退按钮可以正常工作。如果我在上面的代码上这样做,这意味着
super.onBackPressed()
永远不会被调用,这不是正确的答案,因为它不能解决问题。我个人发现,一旦有了答案,特别是有了赞成票,大多数人就会忽视这个问题。一旦我被允许这样做,我将删除否决票,因为显然您不能频繁更改投票。如果在调用
replace()
后移动
addToBackStack()
会发生什么?让我们来看看。为什么要覆盖
onBackPressed
?超级类已经处理了backbackback中的弹出事务,这是我一直听到的,但是如果我不这样做,那么应用程序就会退出。