繁体   English   中英

在 Fragment 中保存状态 WebView

[英]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;
    }
        
}

BottomNavigationView 中的 Webview

我在 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM