web-dev-qa-db-ja.com

状態をフラグメントに保存する方法

アクティビティのフラグメント[フラグメントA、フラグメントB、フラグメントC、フラグメントD]を置き換える4つのボタンがあり、フラグメントAをアクティビティに置き換え、フラグメントAの値を変更した後、フラグメントBをフラグメントAに置き換え、フラグメントCを置き換えます。フラグメントBに。しかし、フラグメントAをフラグメントCに置き換えたいと思います。フラグメントAに状態を保存する方法。

フラグメントをコミットするときのコード

  private void beginFragmentTransaction(BaseFragment fragment) {
    String tag = fragment.getClass().getName();
    currentFragmentTag = tag;

    boolean fragmentPopped = getChildFragmentManager().popBackStackImmediate(tag, 0);

    if (!fragmentPopped) {
        getChildFragmentManager().beginTransaction()
                .replace(R.id.container, fragment, tag)
                .addToBackStack(tag)
                .commit();
    }

}

置き換える図

フラグメントA ------->フラグメントB

フラグメントB ------->フラグメントC

フラグメントC ------->フラグメントA

PS。戻るボタンを使用してフラグメントAに戻るのではなく、フラグメントAを置き換えて、最初のコミットでデータを復元したいと思います。

onCreate()中に状態を復元する代わりに、システムがonRestoreInstanceState()メソッドの後に呼び出すonStart()を実装することを選択できます。システムは、復元する保存済みの状態がある場合にのみonRestoreInstanceState()を呼び出すため、Bundleがnullかどうかを確認する必要はありません。

参考:これはサンプルコードです。参考までに。

public class MainFragment extends Fragment {
private String title;
private double rating;
private int year;

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

savedInstanceState.putString(TITLE, "Gladiator");
savedInstanceState.putDouble(RATING, 8.5);
savedInstanceState.putInt(YEAR, 2000);
}

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

title = savedInstanceState.getString(TITLE);
rating = savedInstanceState.getDouble(RATING);
year = savedInstanceState.getInt(YEAR);
}
}

[〜#〜] fyi [〜#〜]:これは本当に良いスレッドですこれもチェックしてください 一度、正しく保存する方法バックスタック内のフラグメントのインスタンス状態?

5
Sudheesh R