如何在片段中保存状态

时间:2017-06-11 04:26:49

标签: android android-fragments fragmentmanager

我有4个按钮来替换活动中的片段[片段A,片段B,片段C,片段D]然后我将片段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并恢复数据。

1 个答案:

答案 0 :(得分:4)

您可以选择实施onCreate(),而不是在onRestoreInstanceState()期间恢复状态,系统会在onStart()方法之后调用该onRestoreInstanceState()。仅当存在要恢复的已保存状态时,系统才会调用Bundle,因此您无需检查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); } } 是否为空。

仅供参考:这是一个示例代码。仅供参考。

clientRequestFilter

仅供参考:这也是一个很好的线程检查这个Once for all, how to correctly save instance state of Fragments in back stack?