我有一个包含片段的活动。该片段有一个进度条和一个文本视图,以及其他一些东西。进度条和文本视图有时是可见的,在其他时间不可见,具体取决于某些应用程序逻辑。
我要做的是在旋转屏幕时保存这两个视图的当前状态。这是我片段中的相关代码 -
@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会打印上述所有消息(“保存pb可见性”,“捆绑可用!!”,“可见?真”)。我知道我的应用程序逻辑在这段时间内没有将可见性设置为不可见。
即使从包中获得的值为true,进度条也不会显示,即pbTranscribe.setVisibility(ProgressBar.VISIBLE);
显然没有完成其工作。
我哪里错了?如何成功维护进度条状态?
我还尝试在onCreateView()
和onActivityCreated()
中恢复状态,结果相同。此外,我尝试以类似的方式保存文本视图状态,但也提供相同的结果。使用android:freezesText="true"
保存文本视图状态也无法解决问题。
编辑:这就是我在活动的onCreate()
方法中将片段添加到活动的方式 -
@Override
protected void onCreate(Bundle savedInstanceState) {
...
getSupportFragmentManager().beginTransaction()
.replace(R.id.fragments_frame, new WatsonFragment())
.commit();
...
}
答案 0 :(得分:2)
当屏幕旋转时,Activity将调用onCreate并创建另一个WatsonFragment,将代码修改为此
if(savedInstanceState==null){
getSupportFragmentManager().beginTransaction()
.replace(R.id.fragments_frame, new WatsonFragment())
.commit();
}