gpt4 book ai didi

android - 在 Android 中保存状态不起作用

转载 作者:行者123 更新时间:2023-11-29 19:55:31 24 4
gpt4 key购买 nike

我有一个包含 fragment 的 Activity 。该 fragment 有一个进度条和一个 TextView ,以及其他一些东西。进度条和 TextView 有时可见,有时不可见,具体取决于某些应用程序逻辑。

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

@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() 中恢复状态,结果相同。此外,我尝试以类似的方式保存 TextView 状态,但结果也相同。使用 android:freezesText="true" 保存 TextView 状态也没有成功。

编辑:这就是我在 Activity 的 onCreate() 方法中将 fragment 添加到 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();
}

关于android - 在 Android 中保存状态不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36765872/

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