2012-07-02 23 views
59

Estoy cargando URL en vista web:cómo mostrar el progreso al cargar una URL a la vista web en android?

WebView webview=(WebView)findViewById(R.id.webview); 
webview.loadUrl(url); 

Se trata de tomar algún tiempo para cargar url, durante el cual se muestra una pantalla en blanco. Quiero mostrar un cuadro de diálogo de progreso mientras la url está cargando:

ProgressDialog dialog = ProgressDialog.show(this, "HI","Loading......", true); 

Sin embargo, lo anterior es código no está funcionando. Si alguno tiene alguna idea, por favor ayuda. Gracias por adelantado.

+0

Posible duplicado: http://stackoverflow.com/questions/3149216/how-to-listen-for-a-webview- finishing-loading-a-url – LarsH

Respuesta

112

conjunto A WebViewClient a su vista Web, inicie el diálogo de progreso en la que onCreate() método de una descartarlo cuando la página ha terminado de cargar en onPageFinished(WebView view, String url)

import android.app.Activity; 
import android.app.AlertDialog; 
import android.app.ProgressDialog; 
import android.content.DialogInterface; 
import android.content.Intent; 
import android.net.Uri; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.Window; 
import android.webkit.WebSettings; 
import android.webkit.WebView; 
import android.webkit.WebViewClient; 
import android.widget.Toast; 

public class Main extends Activity { 
    private WebView webview; 
    private static final String TAG = "Main"; 
    private ProgressDialog progressBar; 

    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     requestWindowFeature(Window.FEATURE_NO_TITLE); 

     setContentView(R.layout.main); 

     this.webview = (WebView)findViewById(R.id.webview); 

     WebSettings settings = webview.getSettings(); 
     settings.setJavaScriptEnabled(true); 
     webview.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY); 

     final AlertDialog alertDialog = new AlertDialog.Builder(this).create(); 

     progressBar = ProgressDialog.show(Main.this, "WebView Example", "Loading..."); 

     webview.setWebViewClient(new WebViewClient() { 
      public boolean shouldOverrideUrlLoading(WebView view, String url) { 
       Log.i(TAG, "Processing webview url click..."); 
       view.loadUrl(url); 
       return true; 
      } 

      public void onPageFinished(WebView view, String url) { 
       Log.i(TAG, "Finished loading URL: " +url); 
       if (progressBar.isShowing()) { 
        progressBar.dismiss(); 
       } 
      } 

      public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) { 
       Log.e(TAG, "Error: " + description); 
       Toast.makeText(activity, "Oh no! " + description, Toast.LENGTH_SHORT).show(); 
       alertDialog.setTitle("Error"); 
       alertDialog.setMessage(description); 
       alertDialog.setButton("OK", new DialogInterface.OnClickListener() { 
        public void onClick(DialogInterface dialog, int which) { 
         return; 
        } 
       }); 
       alertDialog.show(); 
      } 
     }); 
     webview.loadUrl("http://www.google.com"); 
    } 
} 

su diseño main.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    > 
    <WebView android:id="@string/webview" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:layout_weight="1" /> 
</LinearLayout> 
+1

Gracias por el buen ejemplo, ¡me salvaste el día! – lakshman

1

Debe configurar un propio WebViewClient para su WebView ampliando la clase WebViewClient.

Debe implementar los dos métodos en PageStarted (mostrar aquí) y en PageFinished (descarte aquí).

Más orientación para este tema se puede encontrar en la de Google WebView tutorial

3

Mira la sampl código de correo. Te ayuda

private ProgressBar progressBar; 
progressBar=(ProgressBar)findViewById(R.id.webloadProgressBar); 
WebView urlWebView= new WebView(Context); 
    urlWebView.setWebViewClient(new AppWebViewClients(progressBar)); 
         urlWebView.getSettings().setJavaScriptEnabled(true); 
         urlWebView.loadUrl(detailView.getUrl()); 

public class AppWebViewClients extends WebViewClient { 
    private ProgressBar progressBar; 

    public AppWebViewClients(ProgressBar progressBar) { 
     this.progressBar=progressBar; 
     progressBar.setVisibility(View.VISIBLE); 
    } 
    @Override 
    public boolean shouldOverrideUrlLoading(WebView view, String url) { 
     // TODO Auto-generated method stub 
     view.loadUrl(url); 
     return true; 
    } 

    @Override 
    public void onPageFinished(WebView view, String url) { 
     // TODO Auto-generated method stub 
     super.onPageFinished(view, url); 
     progressBar.setVisibility(View.GONE); 
    } 
} 

Thanks.

+0

Establecer la visibilidad de ProgressBar a GONE es simplemente incorrecto: la vista debe descartarse para eliminarse de View-Stack. – Tim

8

Tendrá que más de paseo onPageStarted y devoluciones de llamada onPageFinished

mWebView.setWebViewClient(new WebViewClient() { 

     public void onPageStarted(WebView view, String url, Bitmap favicon) { 
      if (progressBar!= null && progressBar.isShowing()) { 
       progressBar.dismiss(); 
      } 
      progressBar = ProgressDialog.show(WebViewActivity.this, "Application Name", "Loading..."); 
     } 

     public boolean shouldOverrideUrlLoading(WebView view, String url) { 
      view.loadUrl(url); 

      return true; 
     } 

     public void onPageFinished(WebView view, String url) { 
      if (progressBar.isShowing()) { 
       progressBar.dismiss(); 
      } 
     } 

     public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) { 
      alertDialog.setTitle("Error"); 
      alertDialog.setMessage(description); 
      alertDialog.setButton("OK", new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog, int which) { 
        return; 
       } 
      }); 
      alertDialog.show(); 
     } 
    }); 
-1
public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) { 
     alertDialog.setTitle("Error"); 
     alertDialog.setMessage(description); 
     alertDialog.setButton("OK", new DialogInterface.OnClickListener() { 
      public void onClick(DialogInterface dialog, int which) { 
       return; 
      } 
     }); 
     alertDialog.show(); 
    } 
}); 
Cuestiones relacionadas