我有一个片段似乎在屏幕旋转配置更改时自动恢复状态。我可以在日志中验证每当屏幕旋转时片段中都会调用onCreatView。尽管调用了applyDefaults(),但当屏幕旋转并调用onCreateView()时,用户所做的草稿条目仍被保留。
我的理解是我必须在onSaveInstanceState()中保存状态并在onCreateView()中恢复它,但似乎并非如此。有人可以解释一下吗?
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
Log.d(TAG, "onCreateView()");
View view = inflater.inflate(R.layout.fragment_email_entry, container, false);
m_hostNameEditText = (EditText) view.findViewById(R.id.hostNameEditText);
// set reference for other fields
applyDefaultsForNewEmailAccount();
return view;
}
private void applyDefaults() {
m_hostNameEditText.setText("");
// set other defaults
}
这可能与我的Activity继承自SingleFragmentActivity这一事实有关,因此它可能会看到该片段已经在视图中。不过,我们知道正在调用Fragment.onCreateView()。
public abstract class SingleFragmentActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.single_fragment_activity);
FragmentManager fragmentManager = getFragmentManager();
Fragment fragment = fragmentManager.findFragmentById(R.id.single_frame_container);
if (fragment == null) {
fragment = createFragment();
fragmentManager.beginTransaction()
.add(R.id.single_frame_container, fragment)
.commit();
}
}
public abstract Fragment createFragment();
}
答案 0 :(得分:4)
就像活动一样,片段会自动保存数据 任何片段通过View组件的id查看Bundle中的组件。 就像在活动中一样,如果你确实实现了 onSaveInstanceState()方法确保添加调用 super.onSaveInstanceState()方法以便保留此自动 保存查看数据功能。