[Android] 阻止特定 Fragment 被恢复
Preface
Activity 在经过旋转屏幕(或者其他原因导致配置变更)时,该 Activity 将被销毁并重新创建。 如果 Activity 内放置了 Fragment,Fragment 也会被销毁但会被 FragmentManager 恢复出来,这就带来了一个问题:有些 Fragment 因为时效性问题或者其它原因不需要被恢复。 下面就来解决这个问题。
启发
最开始是在 StackOverflow.com 看到了 这个 回答,看了下 Activity 的源码后发现 Fragment 的状态存放在 savedInstanceState.get(FRAGMENTS_TAG)
里,于是只要 savedInstanceState.remove(FRAGMENTS_TAG)
就能防止 Fragment 被恢复了。但这会导致所有的 Fragment 都不能被恢复,而我希望的是不恢复某个 Fragment 就足够了。
后来又花了一些时间调试一下代码,最后把知识都总结到这个类文件里了:
用法
FragmentStateUtil
也很好用:
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
try {
FragmentStateUtil lFragmentStateUtil = new FragmentStateUtil(this, savedInstanceState);
lFragmentStateUtil.dropFragmentState(DontRestoreThisFragment.class);
} catch (Exception ignore) {
ignore.printStackTrace();
}
super.onCreate(savedInstanceState);
// Your code.
}
上述代码可以使 DontRestoreThisFragment
不会被 FragmentManager
恢复出来。