フラグメントの状態を保存しようとしています。アクティビティといくつかのフラグメントがあります。アクションのシーケンス: 最初のフラグメントを追加し、ビューを手動で変更 (最初の LinearLayout GONE と 2 番目の LinearLayout VISIBLE を可視化する)、フラグメントをデタッチ、別のフラグメントを追加、デタッチし、最初のフラグメントを再びアタッチします。
追加/アタッチ/デタッチは正常に機能しますが、 setRetainInstance(true) は初期フラグメント状態のみを保存します。
最後に、(2 番目ではなく) フラグメントで最初の LinearLayout を表示するので、手動で作成しようとしましたが、機能しません。
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
if (savedInstanceState != null) {
if (savedInstanceState.containsKey(BUNDLE_IS_LOADING)) {
if (savedInstanceState.getBoolean(BUNDLE_IS_LOADING)) {
mBlockContent.setVisibility(View.GONE);
mBlockProgress.setVisibility(View.VISIBLE);
} else {
mBlockContent.setVisibility(View.VISIBLE);
mBlockProgress.setVisibility(View.GONE);
}
}
}
}
setRetainInstance(true);
}
@Override
public void onSaveInstanceState(Bundle b) {
super.onSaveInstanceState(b);
b.putBoolean(BUNDLE_IS_LOADING,
mBlockProgress.getVisibility() == View.VISIBLE);
}
互換ライブラリ rev を使用します。11.
私にとっての解決策:
private boolean isProgressing;
private void saveViewsState() {
isProgressing = mBlockProgress.getVisibility() == View.VISIBLE;
}
private void switchToProgress() {
mBlockContent.setVisibility(View.GONE);
mBlockProgress.setVisibility(View.VISIBLE);
}
private void switchToContent() {
mBlockContent.setVisibility(View.VISIBLE);
mBlockProgress.setVisibility(View.GONE);
}
@Override
public void onSaveInstanceState(Bundle b) {
super.onSaveInstanceState(b);
saveViewsState();
}
@Override
public void onPause() {
super.onPause();
saveViewsState();
}
@Override
public void onResume() {
super.onResume();
if (isProgressing) {
switchToProgress();
} else {
switchToContent();
}
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
if (isProgressing) {
switchToProgress();
} else {
switchToContent();
}
}