Android 中的保存状态不起作用

Saving state in Android not working

我有一个 activity,其中包含一个片段。该片段有一个进度条和一个文本视图,以及其他一些东西。进度条和文本视图有时可见,有时不可见,具体取决于某些应用程序逻辑。

我想做的是在屏幕旋转时保存这两个视图的当前状态。这是我片段中的相关代码 -

@Override
public void onSaveInstanceState(Bundle outState) {

    // pbTranscribe is my progress bar

    if (pbTranscribe != null) {
        Log.d(TAG, "saving pb visibility");
        boolean visibility = (pbTranscribe.getVisibility() == ProgressBar.VISIBLE);
        outState.putBoolean("pbVisible", visibility);
    }
}

@Override
public void onViewStateRestored(Bundle savedInstanceState) {
    super.onViewStateRestored(savedInstanceState);

    if (savedInstanceState != null) {
        Log.d(TAG, "bundle available !!");

        boolean pbVisible = savedInstanceState.getBoolean("pbVisible", false);
        Log.d(TAG, "is visible? " + pbVisible);
        if (pbVisible) {
            pbTranscribe.setVisibility(ProgressBar.VISIBLE);
        }
    }
}

以上代码由于某种原因似乎无法正常工作。如果我在进度条可见时旋转屏幕,logcat 会打印上述所有消息("saving pb visibility"、"bundle available !!"、"is visible? true")。我知道我的应用程序逻辑在此期间没有将可见性设置为不可见。

即使从 bundle 中获取的值为 true,进度条也不会显示,即 pbTranscribe.setVisibility(ProgressBar.VISIBLE); 显然没有完成它的工作。

我哪里错了?如何成功保持进度条状态?

我也试过恢复onCreateView()onActivityCreated()的状态,结果一样。此外,我尝试以类似的方式保存文本视图状态,但结果也相同。使用 android:freezesText="true" 保存文本视图状态也没有成功。

编辑:这就是我在 activity 的 onCreate() 方法中将片段添加到 activity 的方式 -

@Override
protected void onCreate(Bundle savedInstanceState) {
    ...
    getSupportFragmentManager().beginTransaction()
            .replace(R.id.fragments_frame, new WatsonFragment())
            .commit();
    ...
}

当屏幕旋转时,Activity 将调用 onCreate 并创建另一个 WatsonFragment,将您的代码修改为此

if(savedInstanceState==null){
getSupportFragmentManager().beginTransaction()
        .replace(R.id.fragments_frame, new WatsonFragment())
        .commit();
}