【发布时间】:2015-02-27 20:31:12
【问题描述】:
我有这个活动,我用偏好片段替换主要片段。当我在查看首选项后单击返回时,我会看到我的片段应该位于的空白(白色)区域。如果我旋转屏幕,那么它工作得很好。我的片段中的一切似乎都很好,只是它是空白的。这是我的方法:
活动的 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();
}
我的活动的 onBackPressed:
@Override
public void onBackPressed() {
FragmentManager fm = getFragmentManager();
if (fm.getBackStackEntryCount() > 0) {
fm.popBackStack();
return;
}else {
super.onBackPressed();
}
}
那我做错了什么?
谢谢。
编辑:如果我打开首选项然后旋转然后按回,一切正常。
我还应该提到,删除 onBackPressed 方法并不能解决问题,它只会退出应用程序。
编辑:结果证明片段返回堆栈根本不是问题。基本上我的片段有一个recyclerview,这就是它的全部。我在 recyclerview 上设置的适配器实例被保留,而当从后端堆栈中带回片段时,recyclerview 本身是新的,并且我在设置适配器时检查适配器是否为空。
【问题讨论】:
-
你为什么要覆盖
onBackPressed?超类已经在后台处理弹出事务 -
这是我一直听到的,但如果我不这样做,那么应用程序就会退出。
标签: android android-fragments android-navigation