0

フラグメントの状態を保存しようとしています。アクティビティといくつかのフラグメントがあります。アクションのシーケンス: 最初のフラグメントを追加し、ビューを手動で変更 (最初の 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();
    }
}
4

0 に答える 0