er.onViewCreated(view, savedInstanceState);
ButterKnife.bind(this, view);
initWebView();
if (webViewState != null) {
//Fragment实例并未被销毁, 重新create view
webView.restoreState(webViewState);
} else if (savedInstanceState != null) {
//Fragment实例被销毁重建
webView.restoreState(savedInstanceState);
} else {
//全新Fragment
webView.loadUrl(TEST_URL);
}
}
@Override
public void onPause() {
super.onPause();
webView.onPause();
//Fragment不被销毁(Fragment被加入back stack)的情况下, 依靠Fragment中的成员变量保存WebView状态
webViewState = new Bundle();
webView.saveState(webViewState);
}
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
//Fragment被销毁的情况, 依靠outState保存WebView状态
if (webView != null) {
webView.saveState(outState);
}
}
本文完整例子相关实验代码可见: HelloActivityAndFragment 中的State Restore Demo.
本文地址: Android Fragment使用(三) Activity, Fragment, WebView的状态保存和恢复
参考资料
Developer Android: Android Fragment Reference Android FragmentManager Reference
Posts: Recreating an Activity Activity的重新创建 从源码角度剖析Fragment核心知识点 Fragment源码阅读笔记 The Real Best Practices to Save/Restore Activity's and Fragment's state Android中保存和恢复Fragment状态的最好方法
Handling Configuration Changes with Fragments Saving Android View state correctly
Tools: icepick
|