一个activity页面使用Fragment,Fragment中有ListPreference,点击ListPreference 会弹出弹窗。在有弹窗的时候,切换暗色模式,再切换回来,必现页面红屏闪退。
问题的原因在于:
像切换夜间模式、切换语言、显示大小等等,需要修改资源的,activity会销毁重启,使用下面的代码时,每次都会新建一个fragment,导致两次切换之后,activity无法attach到fragment。
private void addFragment() {
getSupportFragmentManager()
.beginTransaction()
.replace(R.id.optimization_scanned_result, newMyPreferenceFragment())
.commit();
使用下面的方法可以规避这个问题:
private void addFragment() {
if (getSupportFragmentManager().findFragmentByTag(FRAGMENT_TAG) == null) {
mFragment = new SecureSettingsFragment();
} else {
mFragment = getSupportFragmentManager().findFragmentByTag(FRAGMENT_TAG);
}
if (mFragment == null) {
return;
}
if (mFragment != null) {
getSupportFragmentManager()
.beginTransaction()
.replace(R.id.settings_content, mFragment, FRAGMENT_TAG)
.commit();
}
}
通过TAG去获取原来的fragment,获取不到再新建。