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