Fragment页面下来回切换暗色模式/语言/显示大小 等出现闪退

一个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,获取不到再新建。

你可能感兴趣的:(Fragment页面下来回切换暗色模式/语言/显示大小 等出现闪退)