如何在片段中保存状态

How to save state in fragment

我有 4 个按钮来替换 activity [片段 A、片段 B、片段 C、片段 D] 中的片段,然后我将片段 A 替换为 activity 并更改片段 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();
    }

}

要替换的图表

fragment A -------> fragment B

fragment B -------> fragment C

fragment C -------> fragment A

PS。我不想使用后退按钮返回到片段 A ,我想在第一次提交时替换片段 A 并恢复数据。

您可以选择实现 onRestoreInstanceState(),而不是在 onCreate() 期间恢复状态,系统会在 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);
}
}

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

如果您想保存以前选项卡的状态并且不想refresh/recreate查看使用此代码并根据选项卡限制更改值

ViewPager mViewPager = (ViewPager)findViewById(R.id.pager);
mViewPager.setOffscreenPageLimit(2); 

您可以显示和隐藏保存状态的片段, 或使用导航组件最新版本