[英]Save state WebView in Fragment
我想要在 Fragment 中保存状态的 webview。 我想要什么。 当我通过导航抽屉切换片段时,我想在片段中保存我的 webview 上的状态。 我找到了一些代码来保存状态,但实际上我不知道在哪里写。 有人可以帮我吗? 我为我的英语感到抱歉。
这是保存状态的代码
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
mWebView.saveState(outState);
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
mWebView.restoreState(savedInstanceState);
}
这是我的代码
public class Zastupovanie extends SherlockFragment{
private Context context;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup group, Bundle saved){
View v = inflater.inflate(R.layout.zastupovanie, group, false);
final ProgressDialog pd = ProgressDialog.show(getActivity(), "", "Prosím čakajte. Prebieha načítavanie... ", true);
final WebView myWebView = (WebView) v.findViewById(R.id.zastupovanie2);
myWebView.setWebViewClient(new WebViewClient() {
@Override
public void onPageFinished(WebView view, String url) {
pd.dismiss();
}
});
myWebView.getSettings().setBuiltInZoomControls(false);
myWebView.getSettings().setSupportZoom(false);
myWebView.getSettings()
.setJavaScriptCanOpenWindowsAutomatically(true);
myWebView.getSettings().setJavaScriptEnabled(true);
myWebView.getSettings().setAllowFileAccess(true);
myWebView.getSettings().setDomStorageEnabled(true);
myWebView.getSettings().setDefaultZoom(ZoomDensity.FAR);
myWebView
.loadUrl("http://soszm.edupage.org/substitution/?");
return v;
}
}
我在 BottomViewNavigation 的片段之一中使用 web 视图。 @Rafael T 提供的解决方案是一个可靠的解决方案。 但是当您导航到 BottomNavigationView 中的另一个 Fragment 时,不会调用onSaveInstanceState()
。 所以我像这样保存并恢复了Webview的状态。
class MyFragment extends Fragment {
private Bundle webviewstate;
private Webview mywebview;
// Saving state
@Override
public void onPause(){
super.onPause();
webviewstate = new Bundle();
mywebview.saveState(webviewstate);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup parent, Bundle savedInstanceState){
if(webviewstate==null){
myWebView.loadUrl("http://soszm.edupage.org/substitution/?"); //Load the page for first time
}else{
myWebView.restoreState(webviewstate); // Restore the state
}
}
}
您可以简单地将此方法添加到您的 Fragment 中,如下所示:
public class Zastupovanie extends SherlockFragment{
Context context;
private WebView myWebView
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
myWebView.saveState(outState);
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
myWebView.restoreState(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup group, Bundle saved)
{
View v = inflater.inflate(R.layout.zastupovanie, group, false);
final ProgressDialog pd = ProgressDialog.show(getActivity(), "", "Prosím čakajte. Prebieha načítavanie... ", true);
myWebView = (WebView) v.findViewById(R.id.zastupovanie2);
myWebView.setWebViewClient(new WebViewClient() {
@Override
public void onPageFinished(WebView view, String url) {
pd.dismiss();
}
});
myWebView.getSettings().setBuiltInZoomControls(false);
myWebView.getSettings().setSupportZoom(false);
myWebView.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);
myWebView.getSettings().setJavaScriptEnabled(true);
myWebView.getSettings().setAllowFileAccess(true);
myWebView.getSettings().setDomStorageEnabled(true);
myWebView.getSettings().setDefaultZoom(ZoomDensity.FAR);
myWebView.loadUrl("http://soszm.edupage.org/substitution/?");
return v;
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.