第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何偵聽WebView完成加載URL?

如何偵聽WebView完成加載URL?

明月笑刀無情 2019-06-24 15:30:19
如何偵聽WebView完成加載URL?我有一個WebView從互聯(lián)網(wǎng)上加載頁面。我想展示一個ProgressBar直到裝貨完成。如何偵聽完成WebView?
查看完整描述

3 回答

?
慕村9548890

TA貢獻1884條經(jīng)驗 獲得超4個贊

延展WebViewClient打電話onPageFinish()如下:

mWebView.setWebViewClient(new WebViewClient() {

   public void onPageFinished(WebView view, String url) {
        // do your stuff here
    }});


查看完整回答
反對 回復 2019-06-24
?
郎朗坤

TA貢獻1921條經(jīng)驗 獲得超9個贊

這并不是百分之百準確。如果一個頁面中有幾個iframes,那么就會有多個onPageFinish(和onPageStarted)。如果您有幾個重定向,它也可能失敗。這種方法解決了(幾乎)所有的問題:

boolean loadingFinished = true;boolean redirect = false;mWebView.setWebViewClient(new WebViewClient() {

    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String urlNewString) {
        if (!loadingFinished) {
            redirect = true;
        }

        loadingFinished = false;
        webView.loadUrl(urlNewString);
        return true;
    }

    @Override
    public void onPageStarted(WebView view, String url) {
        loadingFinished = false;
        //SHOW LOADING IF IT ISNT ALREADY VISIBLE  
    }

    @Override
    public void onPageFinished(WebView view, String url) {
        if (!redirect) {
           loadingFinished = true;
            //HIDE LOADING IT HAS FINISHED
        } else {
            redirect = false; 
        }
    }});

最新情況:

根據(jù)文檔:當嵌入式框架的內(nèi)容發(fā)生變化時,即單擊目標為iframe的鏈接時,將不會調(diào)用onPageStarted。

我在Twitter上發(fā)現(xiàn)了一個特殊的例子,在Twitter上,只有一個頁面被調(diào)用,邏輯有點混亂。為了解決這個問題,我在X秒之后添加了一個預定任務來刪除加載。這并不是所有其他情況下都需要的。

更新2:

現(xiàn)在,使用當前的AndroidWebView實現(xiàn):

boolean loadingFinished = true;boolean redirect = false;

    mWebView.setWebViewClient(new WebViewClient() {

        @Override
        public boolean shouldOverrideUrlLoading(
                WebView view, WebResourceRequest request) {
            if (!loadingFinished) {
               redirect = true;
            }

            loadingFinished = false;
            webView.loadUrl(request.getUrl().toString());
            return true;
        }

        @Override
        public void onPageStarted(
                WebView view, String url, Bitmap favicon) {
            super.onPageStarted(view, url, favicon);
            loadingFinished = false;
            //SHOW LOADING IF IT ISNT ALREADY VISIBLE  
        }

        @Override
        public void onPageFinished(WebView view, String url) {
            if (!redirect) {
               loadingFinished = true;
                //HIDE LOADING IT HAS FINISHED
            } else {
                redirect = false; 
            }
        }
    });


查看完整回答
反對 回復 2019-06-24
?
夢里花落0921

TA貢獻1772條經(jīng)驗 獲得超6個贊

我非常喜歡@NeTeInSteiN(和@Polen)解決方案,但我會用一個計數(shù)器來實現(xiàn)它,而不是多個布爾人或州觀察者(只是另一種口味,但我認為這可能有共同之處)。它確實有一個JS的細微差別,但我覺得邏輯更容易理解。

private void setupWebViewClient() {
    webView.setWebViewClient(new WebViewClient() {
        private int running = 0; // Could be public if you want a timer to check.

        @Override
        public boolean shouldOverrideUrlLoading(WebView webView, String urlNewString) {
            running++;
            webView.loadUrl(urlNewString);
            return true;
        }

        @Override
        public void onPageStarted(WebView view, String url, Bitmap favicon) {
            running = Math.max(running, 1); // First request move it to 1.
        }

        @Override
        public void onPageFinished(WebView view, String url) {
            if(--running == 0) { // just "running--;" if you add a timer.
                // TODO: finished... if you want to fire a method.
            }
        }
    });}


查看完整回答
反對 回復 2019-06-24
  • 3 回答
  • 0 關(guān)注
  • 1142 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號