在 Fragment 中保存状态 WebView
Posted
技术标签:
【中文标题】在 Fragment 中保存状态 WebView【英文标题】:Save state WebView in Fragment 【发布时间】:2013-12-06 03:28:15 【问题描述】:我想要在 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;
【问题讨论】:
【参考方案1】:BottomNavigationView 中的Webview
我在 BottomViewNavigation 的一个片段中使用 web-view。 @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
【讨论】:
【参考方案2】:您可以像这样简单地将这个方法添加到您的片段中:
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;
【讨论】:
谢谢,它运行良好:) 但有时应用程序崩溃,但可能是因为 RAM 或有什么问题? @user2900523 我还发现我的应用程序稳定性在保存和恢复 webview 状态时急剧下降。内部崩溃很多。你有没有找到解决办法?谢谢以上是关于在 Fragment 中保存状态 WebView的主要内容,如果未能解决你的问题,请参考以下文章