[英]Fragment automatically saving and restoring state of EditTexts
我有一個片段,似乎是在屏幕旋轉配置更改時自動恢復狀態。 我可以在日志中驗證每當屏幕旋轉時片段中都會調用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();
}
就像一個活動一樣,一個片段會通過View組件的id自動保存Bundle中任何片段View組件的數據。 就像在活動中一樣,如果你實現了onSaveInstanceState()方法,請確保添加對super.onSaveInstanceState()方法的調用,以便保留View數據功能的這種自動保存。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.