我有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并恢复数据。
答案 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?