简体   繁体   中英

progress bar in webview keeps loading even after web page finished loading

Here is my code

import android.annotation.SuppressLint;
import android.content.Intent;
import android.graphics.Bitmap;
import android.net.Uri;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.ProgressBar;

@SuppressLint("SetJavaScriptEnabled")

public class MainActivity extends ActionBarActivity {

private WebView view;
private ProgressBar progressBar;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    progressBar = (ProgressBar) this.findViewById(R.id.progressBar);
    String url = "http://www.carsaleindiaofficial.com/?m=1";
    view = (WebView) this.findViewById(R.id.webView);
    view.setWebViewClient(new WebViewClient());
    view.getSettings().setJavaScriptEnabled(true);
    view.getSettings().setDomStorageEnabled(true);
    view.loadUrl(url);

}

public class MyAppWebViewClient extends WebViewClient {

    @Override
    public void onPageFinished(WebView view, String url) {
        super.onPageFinished(view, url);
        view.findViewById(R.id.progressBar).setVisibility(View.GONE);


        //if (progressBar.getVisibility() == View.VISIBLE)
        //progressBar.setVisibility(View.INVISIBLE);

        //progressBar.setVisibility(View.INVISIBLE);
        //progressBar.setVisibility(View.GONE);


    }

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


    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        if (Uri.parse(url).getHost().endsWith("carsaleindiaofficial.com/?m=1")) {
            return false;
        }

        Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
        view.getContext().startActivity(intent);
        return true;
    }

}


@Override
public void onBackPressed() {
    if (view.canGoBack()) {
        view.goBack();
    } else {
        super.onBackPressed();
    }
}


@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.menu_main, menu);
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {

    int id = item.getItemId();

    if (id == R.id.action_settings)
        view.loadUrl(view.getUrl());

    return super.onOptionsItemSelected(item);
    }
}

The progress bar and webview works fine but when the page is finished loading the progress bar still remains? When I have loaded the page the progress bar visibility doesn't dissapear/change to GONE? Where is the error? Ive tried both progressBar.setVisibility(View.INVISIBLE) and progressBar.setVisibility(View.GONE); but nothin seems to work.

 private class MyWebViewClient extends WebViewClient {
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        view.loadUrl(url);
        return true;
    }

    @Override
    public void onPageFinished(WebView view, String url) {
        progressBar.setVisibility(View.GONE);
        FGallery.this.progressBar.setProgress(100);
        super.onPageFinished(view, url);
    }

    @Override
    public void onPageStarted(WebView view, String url, Bitmap favicon) {
        progressBar.setVisibility(View.VISIBLE);
        FGallery.this.progressBar.setProgress(0);
        super.onPageStarted(view, url, favicon);
    }
}

This is working for me. you can set it as WebViewClient .

Instead of using customizing webclient. you use default webclient. your problem is replace this.

view.setWebViewClient(new WebViewClient()); 

add this

view.setWebViewClient(new MyAppWebViewClient());

and also

 progressBar.setVisibility(View.INVISIBLE);

not

view.findViewById(R.id.progressBar1).setVisibility(View.GONE);

full code

import android.annotation.SuppressLint;
import android.content.Intent;
import android.graphics.Bitmap;
import android.net.Uri;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.ProgressBar;

@SuppressLint("SetJavaScriptEnabled")

public class MainActivity extends ActionBarActivity {

private WebView view;
private ProgressBar progressBar;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_maine);

    progressBar = (ProgressBar) this.findViewById(R.id.progressBar1);
    String url = "http://www.carsaleindiaofficial.com/?m=1";
    view = (WebView) this.findViewById(R.id.webView1);
    view.setWebViewClient(new MyAppWebViewClient());
    view.getSettings().setJavaScriptEnabled(true);
    view.getSettings().setDomStorageEnabled(true);
    //view.loadUrl(url);
    view.loadUrl("http://m.facebook.com/");
   // view.loadUrl("file:///android_asset/web.html");

}

public class MyAppWebViewClient extends WebViewClient {

    @Override
    public void onPageFinished(WebView view, String url) {
        super.onPageFinished(view, url);
        //view.findViewById(R.id.progressBar1).setVisibility(View.GONE);
        Log.i("pageFinished", "yesss");
        progressBar.setVisibility(View.INVISIBLE);
        //progressBar.setVisibility(View.GONE);
    }

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


    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
       view.loadUrl(url);
       return true;
    }

}


@Override
public void onBackPressed() {
    if (view.canGoBack()) {
        view.goBack();
    } else {
        super.onBackPressed();
    }
}


@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.maine, menu);
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {

    int id = item.getItemId();

    if (id == R.id.action_settings)
        view.loadUrl(view.getUrl());

    return super.onOptionsItemSelected(item);
    }
}

just changed WebViewClient to MyWebViewClient, progressBar to progressBar1 & ActionBarActivity to AppCompatActivity and every code seems to work :) thank again every1.. :) @Devendra & @akhil :)

my final code

import android.annotation.SuppressLint;
import android.graphics.Bitmap;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.ProgressBar;

@SuppressLint("SetJavaScriptEnabled")

public class MainActivity extends  AppCompatActivity {



private WebView view;
private ProgressBar progressBar;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    progressBar = (ProgressBar) this.findViewById(R.id.progressBar1);
    String url = "http://www.carsaleindiaofficial.com/?m=1";
    view = (WebView) this.findViewById(R.id.webView);
    view.setWebViewClient(new MyWebViewClient());
    view.getSettings().setJavaScriptEnabled(true);
    view.getSettings().setDomStorageEnabled(true);
    view.loadUrl(url);

}

    public class MyWebViewClient extends WebViewClient {

    @Override
    public void onPageFinished(WebView view, String url) {
        super.onPageFinished(view, url);
        Log.i("pageFinished", "yesss");
        progressBar.setVisibility(View.GONE);
        Log.i("progressBar", "Gone");
    }

    @Override
    public void onPageStarted(WebView view, String url, Bitmap favicon) {
        progressBar.setVisibility(View.VISIBLE);
        Log.i("progressBar", "Visible");
        super.onPageStarted(view, url, favicon);
    }


    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        view.loadUrl(url);
        Log.i("ShldOvrideUrl", "working");
        return true;
    }

   }


@Override
public void onBackPressed() {
    if (view.canGoBack()) {
        view.goBack();
    } else {
        super.onBackPressed();
    }
}


@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.menu_main, menu);
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {

    int id = item.getItemId();

    if (id == R.id.action_settings)
        view.loadUrl(view.getUrl());

    return super.onOptionsItemSelected(item);
}
}

在webview url的意图之后你必须写progressbar.visibility="View.GONE"

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM