How to control the Android WebView history/back stack?

后端 未结 7 1971
半阙折子戏
半阙折子戏 2021-02-04 10:49

I am trying to figure out a way to handle the WebView back stack similar to how the Android web browser handles it when the back button is pressed from within my own app\'s WebV

7条回答
  •  清酒与你
    2021-02-04 11:05

    Detect when url loading is triggered by the user, and add those to the backstack instead.

    private List previous = new ArrayList();
    private String mLastUrl;
    webview.setWebViewClient(new WebViewClient() {
        @Override
        public void onPageFinished(WebView view, String url) {
            Log.i("DebugDebug", "OnPageFinished " + url);
            mLastUrl = url;
            super.onPageFinished(view, url);
        }
    });
    
    webview.setOnTouchListener(new View.OnTouchListener() {
        @Override
        public boolean onTouch(View view, MotionEvent motionEvent) {
            WebView.HitTestResult hr  = ((WebView)view).getHitTestResult();
            if (hr != null && mLastUrl != null) {
                if (previous.isEmpty() || !previous.get(previous.size() - 1).equals(mLastUrl)) {
                    previous.add(mLastUrl);
                }
                Log.i("DebugDebug", "getExtra = " + hr.getExtra() + "\t\t Type = " + hr.getType());
            }
            return false;
        }
    });
    
    
    @Override
    public void onBackPressed() {
        Log.i("DebugDebug", "onBackPressed");
        int size = previous.size();
        if (size > 0){
            webview.loadUrl(previous.get(size - 1));
            previous.remove(size - 1);
        } else {
            super.onBackPressed();
        }
    }
    

提交回复
热议问题