2010-07-19 9 views
6

¿Qué necesito para que mi código haga el cuadro de diálogo dismiss() después de cargar la vista web?¿Cómo hago para que mi diálogo de progreso se cierre después de cargar la vista web?

public void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.main); 
      CookieSyncManager.createInstance(this); 
      CookieSyncManager.getInstance().startSync(); 
      webview = (WebView) findViewById(R.id.webview); 
      webview.setWebViewClient(new homeClient()); 
      webview.getSettings().setJavaScriptEnabled(true); 
      webview.getSettings().setPluginsEnabled(true); 
      webview.loadUrl("http://google.com"); 

      ProgressDialog pd = ProgressDialog.show(Home.this, "", 
        "Loading. Please wait...", true); 

     } 

He intentado

public void onPageFinshed(WebView view, String url){ 
     pd.dismiss(); 
    } 

no funcionó.

+0

¿Se llama a onPageFinished? En el hilo de ui? –

+0

Lo siento, debería haber hecho esto en primer lugar, puse toda la clase de la forma en que lo tengo. y si te desplazas hacia arriba puedes ver que probé un onPageFinshed y no funcionó. tal vez la forma en que lo hice estaba mal? o donde lo coloqué? – brybam

Respuesta

16

: o webview.setWebViewClient (nueva homeClient()); homeClient() ????

probar esto

... 
... 
... 

webview = (WebView) findViewById(R.id.webview); 
webview.setWebViewClient(new WebViewClient() { 
      public boolean shouldOverrideUrlLoading(WebView view, String url) {    
       view.loadUrl(url); 
       return true; 
      } 


      public void onPageFinished(WebView view, String url) { 
       if (progressBar.isShowing()) { 
        progressBar.dismiss(); 
       } 
      } 
webview.loadUrl("http://www.google.com"); 

} 

actualización :: este es un buen ejemplo.

Android WebView and the Indeterminant Progress Solution

+1

Ese ejemplo hizo el truco, gracias! – brybam

+1

¡Ese es el boleto! – Atma

1

¿Cómo está accediendo a pd en onPageFinshed()? (¿Y estás seguro de que en realidad se llama cuando se carga la página?)

En su onCreate(), trate de pasar a su pdhomeClient modo que homeClient puede hacerse cargo de despedir el diálogo.

Su homeClient debería tener este aspecto:

private class homeClient extends WebViewClient { 

    private ProgressDialog pd; 

    public homeClient(ProgressDialog pd) { 
     this.pd = pd; 
    } 

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

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

En su onCreate():

ProgressDialog pd = ProgressDialog.show(Fbook.this, "", 
       "Loading. Please wait...", true); 
webview.setWebViewClient(new homeClient(pd)); 
+0

Muy buen ejemplo, me gusta! – IamStalker

+0

Genial ... la parte que me he perdido hace unos minutos. – MbaiMburu

3

esto está bien.

public class WordActivity extends Activity { 

    private WebView webview; 
    private ProgressDialog progressDialog; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.webview); 
     Bundle objetbunble = this.getIntent().getExtras(); 
     webview = (WebView) findViewById(R.id.webview); 

     final Activity activity = this; 

     webview.getSettings().setJavaScriptEnabled(true); 

     webview.setWebViewClient(new WebViewClient() { 
      public boolean shouldOverrideUrlLoading(WebView view, String url) {    
       view.loadUrl(url); 
       return true; 
      } 
      public void onLoadResource (WebView view, String url) { 
       if (progressDialog == null) { 
        progressDialog = new ProgressDialog(activity); 
        progressDialog.setMessage("Chargement en cours"); 
        progressDialog.show(); 
       } 
      } 
      public void onPageFinished(WebView view, String url) { 
       if (progressDialog.isShowing()) { 
        progressDialog.dismiss(); 
        progressDialog = null; 
       } 
      } 
     }); 
     webview.loadUrl("http://www.example.com"); 
    } 


} 
+0

Hey samuel he usado tu código para las vistas web para el lanzamiento inicial de todo lo que funciona bien. así que cuando navego a la misma vista web para el segundo progreso de diálogo de tiempo que muestra continuamente después de pagefinish (nota: esperó 10 minutos pero el diálogo de progreso no descartó) Por favor, ayúdame cómo puedo hacer tat .. gracias de antemano ... –

3

@Jorgesys esto no es 100% exacto. Si tiene varios iframes en una página, tendrá múltiples onPageFinished (y onPageStarted). Y si tiene varias redirecciones, también puede fallar. Este enfoque, creo que resuelve todos los problemas:

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; 
     } 

     if(loadingFinished && !redirect){ 
     //HIDE LOADING IT HAS FINISHED 
     } else{ 
      redirect = false; 
     } 

    } 
}); 
0

Si simplemente quiere mostrar el progreso antes de cargar página web en vista web. Simplemente se puede solicitar para características de la ventana Progreso como

getWindow().requestFeature(Window.FEATURE_PROGRESS); 

antes setContentView(R.layout.blahblah);

y mostrar el progreso en onProgressChanged como

final Activity context= this; 
webview.setWebChromeClient(new WebChromeClient() 
{ 
    public void onProgressChanged(WebView webView, int progress) 
    { 
    activity.setProgress(progress * 1000); 
    } 
}); 

Y si quieres añadirle posee ProgressDialog luego use WebviewClient

webView.setWebViewClient(new WebViewClient() { 
    ProgressDialog rogressDialog ; 
    @Override 
    public void onPageStarted(WebView view, String url, Bitmap bitmap) { 
     progressDialog = ProgressDialog.show(context, "Loading...", "Please wait...");//where context = YourActivity.this; 
     super.onPageStarted(view, url, bitmap); 
    } 

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

webView.loadUrl(url); 
0
wv1.setWebViewClient(new WebViewClient() { 
      public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) { 
       Toast.makeText(Entertainment.this, description, Toast.LENGTH_SHORT).show(); 
      } 

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


      @Override 
      public void onPageFinished(WebView view, String url) { 
       progressDialog.dismiss(); 
       String webUrl = wv1.getUrl(); 

      } 

     }); 

    wv1.loadUrl(url); 

El código anterior mostrará un diálogo de progreso para cada enlace de entrada a navegar a la vista web en.

Cuestiones relacionadas