我有一个应用程序,它有两个片段作为操作栏选项卡。在选项卡之间切换时,片段被附加/分离。每当我切换选项卡、更改方向或按返回退出应用程序时,视图都会被破坏。我需要它在重新打开时恢复到以前的状态。我知道,至少在方向更改时,要使用 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 (我认为按下后退按钮时也不会调用?)。在这些情况下,我应该如何保留视图状态?