保存WebView在片段之间显示数据状态

时间:2015-11-30 08:37:01

标签: android android-fragments webview

我有Activity个片段,其中一个片段在WebView中显示我公司的网站。我一直在阅读有关如何保存/恢复WebView状态的信息,似乎WebView.saveStatus(Bundle)WebView.restoreStatus(Bundle)方法不太可靠,而且它们不存储显示数据,所以我决定不要这样使用。

现在,我保存了onPause中变量中访问过的最后一个网址,然后在onCreateView中加载此网址。

    private String lastUrl = "http://www.mycompany.com";

    @Override
    public void onPause() {
        super.onPause();
        lastUrl = webview.getUrl();
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

        contentView = super.onCreateView(inflater, container, savedInstanceState);

        if (contentView == null) {
            contentView = inflater.inflate(layout.extranet_fragment, container, false);
        }

        webview = (WebView) contentView.findViewById(R.id.extranet_webview);
        webview.setWebViewClient(new WebViewClient());
        webview.setWebChromeClient(new WebChromeClient());
        webview.getSettings().setJavaScriptEnabled(true);
        webview.loadUrl(lastUrl);

        return contentView;
    }

它工作正常,但现在我需要保存单页Web应用程序的状态。然后,当我浏览网页时,网址始终为http://www.mycompany.com/#

如何保存/恢复此状态?

2 个答案:

答案 0 :(得分:0)

您可以使用webClient并在WebView加载之前实现shouldOverrideUrlLoading来拦截所有网址。

mWebView.setWebViewClient(new WebViewClient() {


    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {

// ASSIGN THIS URL to your **lastUrl** variable
       // Here put your code
          Log.d("My Webview", url);

       // return true; //Indicates WebView to NOT load the url;
          return false; //Allow WebView to load url
    }
});

START EDIT

@Override
        public void onPageStarted(WebView view, String url, Bitmap favicon) {
            super.onPageStarted(view, url, favicon);

            System.out.println("your current url when webpage loading.." + url);
        }

结束编辑

此外,你可以像在这里一样处理webview中的背压

 if (mWebView.canGoBack()) {
                mWebView.goBack();
            } 

在onBackPress活动或片段方法中使用上述代码。

答案 1 :(得分:0)

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (event.getAction() == KeyEvent.ACTION_DOWN) {
        switch (keyCode) {
            case KeyEvent.KEYCODE_BACK:
                if (mWebView.canGoBack()) {
                    mWebView.goBack();
                } else {
                    finish();
                }
                return true;
        }

    }
    return super.onKeyDown(keyCode, event);
}