1

我有一个应用程序,它有两个片段作为操作栏选项卡。在选项卡之间切换时,片段被附加/分离。每当我切换选项卡、更改方向或按返回退出应用程序时,视图都会被破坏。我需要它在重新打开时恢复到以前的状态。我知道,至少在方向更改时,要使用 onSaveInstanceState 并将数据保存在那里,以便在重新创建视图时恢复它。但是,由于某种原因,即使数据正确保存到 outState 包并从 savedInstanceState 包中正确读取,视图也不会更新到它应该更新的内容。例如,我启动了一项服务,当该服务运行时,我需要隐藏两个按钮并在其位置显示另外两个按钮。我使用布尔值来检查服务是否正在运行,然后把它放在 outState 中,这样我就可以看到要显示或隐藏哪些按钮。我的代码是:

@Override
public void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
    outState.putBoolean("isRunning", isRunning);
}

在 onCreateView 中:

if (savedInstanceState != null) {
        isRunning = savedInstanceState.getBoolean("isRunning", false);
        if (isRunning) {
            showStopButton();
        }
}

showStopButton 代码是:

private void showStopButton() {
    btnStart.setVisibility(View.GONE);
    btnReset.setVisibility(View.GONE);
    btnStop.setVisibility(View.VISIBLE);
    btnLoop.setVisibility(View.VISIBLE);
}

所以这一切都奏效了,在服务运行时布尔值被认定为真,并调用了 showStopButton()。然而,它似乎并没有真正做任何事情。视图状态只是将自身重置为好像显示前两个按钮(我想隐藏)而不是我实际想要显示的按钮。知道为什么会发生这种情况/如何解决吗?

我还有一个列表视图,我需要保持与以前相同的值填充,我也无法开始工作。

此外,切换选项卡时不会调用 onSaveInstanceState (我认为按下后退按钮时也不会调用?)。在这些情况下,我应该如何保留视图状态?

4

0 回答 0