Android: WebView's method goBack() shows a blank page

后端 未结 5 1403
一整个雨季
一整个雨季 2021-01-11 16:38

I have an android application that loads web pages in an activity with a WebView. I am using the retrieving the page manually and using WebView\'s loadDataWithBaseUR

5条回答
  •  盖世英雄少女心
    2021-01-11 17:19

    The way I deal with this is keeping a local stack pointer to the number of loaded pages after the root page loaded using loadDataWithBaseURL . When going back, if my pointer hits 1 I am at root level and reload the root page with loadDataWithBaseURL.

    FYI, I use this code in Activities with fragments, so the fragments implement the interface IBackButtonListener which helps me to capture the back button in the main activity and propagate the event to the current fragment. If the fragment returns true it means it has taken care of the event.

    IBackbuttonListener.java

    public interface IBackButtonListener {
        public boolean onBackButtonPressed();
    }
    

    Fragment that implements IBackButtonListener and has a webview loaded from html data.

        private int historyStackPointer = 0;
    
        ...
    
             @Override
                public boolean onBackButtonPressed() {
                    boolean rtn = false;
    
                    if (webView.canGoBack()) {
                        if(historyStackPointer > 1) {
                            webView.goBack();
                            historyStackPointer--;
                            rtn = true;
                        }else{
                            if(historyStackPointer == 1) {
                                // Reload the html data 
                                webView.loadDataWithBaseURL("file:///android_asset/", html_data, "text/html", "UTF-8", null);
                                historyStackPointer = 0;
                                rtn = true;
                            }else{
                                webView.loadUrl("about:blank");
                                rtn = false;
                            }
                        }
                    } else {
                        rtn = false;
                    }
                    return rtn;
                }
    

    html_data is a String with the page's html.

提交回复
热议问题