gpt4 book ai didi

android - 隐藏的 backstack fragment 在配置更改时重新显示

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:25:27 26 4
gpt4 key购买 nike

我正在构建一个单 Activity 多 fragment 应用程序。我在每次交易后添加到后台。在几次隐藏和显示 fragment 然后我旋转手机后,添加到容器中的所有 fragment 都已恢复并且每个 fragment 都在另一个 fragment 之上。

可能是什么问题?为什么我的 Activity 显示我之前隐藏的 fragment ?

我正在考虑隐藏所有以前隐藏但现在显示的 fragment ,但是否有更“优雅”的方式来做到这一点?

最佳答案

对每个 fragment 使用setRetainInstance(true),您的问题就会消失。
警告:将此设置为 true 将更改 Fragments 生命周期。
虽然 setRetainInstance(true) 解决了这个问题,但在某些情况下您可能不想使用它。要解决这个问题,请在 Fragment 上设置一个 bool 属性并恢复可见性:

private boolean mVisible = true;
@Override
public void onCreate(Bundle _savedInstanceState) {
super.onCreate(_savedInstanceState);
if (_savedInstanceState!=null) {
mVisible = _savedInstanceState.getBoolean("mVisible");
}
if (!mVisible) {
getFragmentManager().beginTransaction().hide(this).commit();
}
// Hey! no setRetainInstance(true) used here.
}
@Override
public void onHiddenChanged(boolean _hidden) {
super.onHiddenChanged(_hidden);
mVisible = !_hidden;
}
@Override
public void onSaveInstanceState(Bundle _outState) {
super.onSaveInstanceState(_outState);
if (_outState!=null) {
_outState.putBoolean("mVisible", mVisible);
}
}

一旦配置发生变化(例如屏幕方向),实例将被销毁,但 Bundle 将被存储并注入(inject)到新的 Fragment 实例中。

关于android - 隐藏的 backstack fragment 在配置更改时重新显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11155651/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com