安卓webview加载对话框

3
我正在尝试在我的Webview应用程序中实现一个加载对话框,但无论我做什么都不起作用。
我想要的是,每当有人在Webview中点击链接时,加载对话框就会弹出,如下所示: loading dialog (来源:wordpress.com
当加载完成后,它必须消失。有人可以向我展示如何在我的源代码中实现它吗?我已经尝试了很多方法,但总是有问题,所以我真的不知道该怎么做。
这是我的WebviewActivity:
import android.content.res.Configuration;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View;
import android.view.Window;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;

public class WebviewActivity extends MainActivity {

    private WebView myWebView;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        this.requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.main);

        myWebView = (WebView)findViewById(R.id.webview);        
        WebSettings webSettings = myWebView.getSettings();
        webSettings.setJavaScriptEnabled(true);        
        myWebView.setWebViewClient(new WebViewClient());

        myWebView.requestFocus(View.FOCUS_DOWN);
        myWebView.setOnTouchListener(new View.OnTouchListener() {
            public boolean onTouch(View v, MotionEvent event) {
                switch (event.getAction()) {
                    case MotionEvent.ACTION_DOWN:
                    case MotionEvent.ACTION_UP:
                        if (!v.hasFocus()) {
                            v.requestFocus();
                        }
                        break;
                }
                return false;
            }
        });
    }   

    @Override
    public void onResume() {
        super.onResume();
        if ( isOnline() == true )
            myWebView.loadUrl(webLink);
        else if ( isOnline() == false )
            showNoConnectionDialog();
    }

    @Override
    public void onConfigurationChanged(Configuration newConfig){        
        super.onConfigurationChanged(newConfig);
    }
}

非常感谢您的帮助!!

请使用异步任务来完成此操作,不要使用自定义进度对话框。请参考此链接:http://as400samplecode.blogspot.in/2011/09/android-asynctask-httpclient-with.html - Aerrow
好的,但我不是很擅长那个,所以我不知道如何实现... - MartijnG
3个回答

5
您需要像这样覆盖 WebViewClient:
      webview.setWebViewClient(new WebViewClient(){

            @Override
            public void onPageFinished(WebView view, final String url) {

                progressDialog.cancel();


            }
            @Override
            public void onPageStarted(WebView view, String url, Bitmap favicon) {

                progressDialog.show();
            }
      });

webview.loadUrl(TwitterUrl);

2
这是我的最终解决方案:
    myWebView.setWebViewClient(new WebViewClient(){
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            progressDialog.show();
            view.loadUrl(url);
            return true;                
        }
        @Override
        public void onPageFinished(WebView view, final String url) {
            progressDialog.dismiss();
        }
    });

0

这可以通过WebChromeClient实现。对我来说确实有效。

代码片段:

progressDialog.show(); // Add before page load
webView.setWebChromeClient(new HelpWebChromeClient());
private class HelpWebChromeClient extends WebChromeClient {
   @Override
   public void onProgressChanged(WebView view, int newProgress) {
     if(newProgress == 100)
        progressDialog.dismiss();
     }
 }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接