JalilIrfan
JalilIrfan

Reputation: 158

progress bar in webview keeps loading not hiding after page finished loading

I am showing a progress dialog in my webview but it is not hiding on page finished i browsed through many SO its said to "progress.dismiss()" but still its not dismissing also the loading is not shown which i move to other pages in the webview

my code is

public class MainActivity extends ActionBarActivity {
private WebView webView;
private final String TAG = MainActivity.class.getSimpleName();
ConnectivityManager cm;
android.net.NetworkInfo wifi;
android.net.NetworkInfo datac;
@Override
protected void onCreate(Bundle savedInstanceState) {
    this.supportRequestWindowFeature(Window.FEATURE_NO_TITLE);
    cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
    wifi = cm.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
    datac = cm.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
    if ((wifi != null & datac != null)
            && (wifi.isConnected() | datac.isConnected())) {
        //getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);  //to hide notification bar
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        webView = (WebView)findViewById(R.id.webView);
        WebSettings webSettings = webView.getSettings();
        webSettings.setJavaScriptEnabled(true);
        webSettings.setDomStorageEnabled(true);
        webSettings.setAppCacheEnabled(true);
        webView.setWebViewClient(new WebViewClient(){

            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                boolean returnValue=true;
                if ((wifi != null & datac != null)
                        && (wifi.isConnected() | datac.isConnected())) {
                    if ((Uri.parse(url).getHost().contains("www.cbazaar") || Uri.parse(url).getHost().contains("payseal.icicibank")) || Uri.parse(url).getHost().contains("www.ccavenue")
                            || Uri.parse(url).getHost().contains("www.braintreepaments") || Uri.parse(url).getHost().contains("www.sandbox")) {

                        returnValue=false;
                    }

                if(returnValue==true){
                Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
                view.getContext().startActivity(intent);
                return returnValue;
                }
                }
                return returnValue;
            }
         @Override
            public void onReceivedError(WebView view, int errorCode,
                                      String description, String failingUrl) {
             webView.loadUrl("javascript:history.go(-1)");

          }
            ProgressDialog pd = null;

            @Override
            public void onPageStarted(WebView view, String url, Bitmap favicon) {
                super.onPageStarted(view, url, favicon);
                pd = new ProgressDialog(MainActivity.this);
                pd.setTitle("Please wait");
                pd.setMessage("");
                pd.show();
            }

            @Override
            public void onPageFinished(WebView view, String url) {
                super.onPageFinished(view, url);
                pd.dismiss();
            }
        });

        webView.loadUrl("http://www.cbazaar.com");
    }else{
        //no connection
        setContentView(R.layout.activity_no_internet);
        Button netOnBtn=(Button) findViewById(R.id.netOnButton);
        Button refreshHmeBtn=(Button) findViewById(R.id.refreshHmeBtn);
        netOnBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                startActivityForResult(new Intent(android.provider.Settings.ACTION_SETTINGS), 0);
            }
        });
        refreshHmeBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent gotoMainActivity = new Intent (MainActivity.this,MainActivity.class);
                startActivity(gotoMainActivity);
                finish();
            }
        });

    }
}
// Open previous opened link from history on webview when back button pressed

@Override
// Detect when the back button is pressed
public void onBackPressed() {
    if(webView.canGoBack()) {
        webView.goBack();
    } else {
        // Let the system handle the back button
        super.onBackPressed();
    }
}

Can some one help me as how can this be debugged or why is the loading not dismissing and not displaying when moving to other pages

Thanks in advance as this is my first web app.

Upvotes: 1

Views: 2283

Answers (1)

Jonas Czech
Jonas Czech

Reputation: 12328

Try something like this:

private void startWebView(String url) {

    MyView.setWebChromeClient(new WebChromeClient() {
        ProgressDialog progressDialog =  new ProgressDialog(MainActivity.this);
        @Override
        public void onProgressChanged(WebView view, int progress) {
            if (progress < 100) {
                // in standard case YourActivity.this

                progressDialog.setMessage("Loading...");
                progressDialog.show();

            }

            if (progress == 100) {
                if (progressDialog.isShowing()) {
                    progressDialog.dismiss();
                    progressDialog = null;
                }
            }
        }
    });


    // Javascript enabled on webview
    webView.getSettings().setJavaScriptEnabled(true);

    //Load url in webview
    webView.loadUrl(url);

}

This way, you can use a real progressbar in your ProgressDialog.

Upvotes: 2

Related Questions