0
我想了解使用片段保存和恢復狀態的過程。我使用它創建了滑動導航菜單。使用片段保存和恢復狀態
在一個片段有這樣的代碼:
public class FifthFragment extends Fragment {
CheckBox cb;
View view;
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
view = inflater.inflate(R.layout.fifth_layout, container, false);
cb = (CheckBox) view.findViewById(R.id.checkBox);
return view;
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
if (savedInstanceState != null) {
// Restore save state
}
}
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
// save state
}
}
例如,我想用戶退出片段之前保存複選框的狀態,並重新創建片段時恢復。如何實現這一目標?
編輯:
根據raxellson的答案,我已經改變了我的片段是:
public class FifthFragment extends Fragment {
private static final String CHECK_BOX_STATE = "string";
CheckBox cb;
View view;
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fifth_layout, container, false);
cb = (CheckBox) view.findViewById(R.id.checkBox);
if (savedInstanceState == null) {
Log.i("statenull", "null");
}
if (savedInstanceState != null) {
// Restore last state for checked position.
boolean checked = savedInstanceState.getBoolean(CHECK_BOX_STATE, false);
cb.setChecked(checked);
}
return view;
}
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putBoolean(CHECK_BOX_STATE, cb.isChecked());
}
}
我得到了登錄I/statenull: null
所以savedInstanceState未保存。我究竟做錯了什麼?
它不適合我。我已經添加了'if(savedInstanceState == null){ Log.i(「statenull」,「null」); }'。每當我打開這個片段時,它就會記錄下這個:/ – Godfryd
那麼你是否在'onSaveInstanceState'中存儲了任何東西?用你的東西更新你的文章。 – raxelsson
是的,這個'outState.putBoolean(CHECK_BOX_STATE,cb.isChecked());'。 – Godfryd