以下是一个示例代码,演示了如何保存和恢复一个片段的状态:
public class FragmentState extends Fragment {
private static final String ARG_TEXT = "text";
private String mText;
public FragmentState() {
// Required empty public constructor
}
public static FragmentState newInstance(String text) {
FragmentState fragment = new FragmentState();
Bundle args = new Bundle();
args.putString(ARG_TEXT, text);
fragment.setArguments(args);
return fragment;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View view = inflater.inflate(R.layout.fragment_state, container, false);
TextView textView = view.findViewById(R.id.text_view);
if (savedInstanceState != null) {
mText = savedInstanceState.getString(ARG_TEXT);
} else if (getArguments() != null) {
mText = getArguments().getString(ARG_TEXT);
}
textView.setText(mText);
return view;
}
@Override
public void onSaveInstanceState(@NonNull Bundle outState) {
super.onSaveInstanceState(outState);
outState.putString(ARG_TEXT, mText);
}
}
在上面的示例中,FragmentState
类继承自 Fragment
类,重写了 onCreateView()
方法和 onSaveInstanceState()
方法。
在 onCreateView()
方法中,我们首先通过 savedInstanceState
来检查是否有保存的状态。如果有,我们将恢复之前保存的文本内容。否则,我们从 getArguments()
中获取传递给片段的参数,并将其设置为文本内容。
在 onSaveInstanceState()
方法中,我们通过 outState
参数保存当前的文本内容,以便在片段重新创建时恢复。
这样,当设备配置发生变化(如旋转屏幕)或者片段被销毁并重新创建时,我们可以保存并恢复之前的文本内容。