2010-07-19 3 views
6

Cosa è necessario al mio codice per rendere la finestra di dialogo dismiss() dopo aver caricato la webview?Come faccio a disattivare la mia finestra di avanzamento dopo aver caricato Webview?

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

     } 

Ho provato

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

Non ha funzionato.

+0

È chiamato onPageFinished? Nel thread dell'interfaccia utente? –

+0

Scusa se dovessi averlo appena fatto, ho messo tutta la classe nel modo in cui la corrente ce l'ha. e se si scorre verso l'alto si può vedere ho provato un onPageFinshed e non ha funzionato. forse il modo in cui l'ho fatto è stato sbagliato? o dove l'ho messo? – brybam

risposta

16

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

provare questo aggiornamento

... 
... 
... 

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"); 

} 

:: questo è un buon esempio.

Android WebView and the Indeterminant Progress Solution

+1

Questo esempio ha fatto il trucco, grazie! – brybam

+1

Questo è il biglietto! – Atma

1

Come si accede a pd in onPageFinshed()? (E sei sicuro che in realtà è chiamato al caricamento della pagina?)

Nella tua onCreate(), provare passando pd al vostro homeClient modo che homeClient può prendersi cura di chiudere la finestra di.

tuo homeClient dovrebbe essere simile a questo:

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

Nel vostro onCreate():

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

Un bell'esempio, mi piace! – IamStalker

+0

Raffreddare ... la parte che mi manca da qualche minuto ora. – MbaiMburu

3

Questo è OK.

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

Ehi samuel ho usato il tuo codice per le visualizzazioni web per il lancio iniziale, ogni cosa funzionava bene. così quando navigo alla stessa webview per il progressdialog della seconda volta che mostra continuamente dopo pagefinish (nota: aspettato per 10 minuti ma la finestra di dialogo del progresso non ha chiuso) Per favore aiutami come posso fare tat .. grazie in anticipo ... –

3

@Jorgesys questo non è preciso al 100%. Se hai diversi iframe in una pagina avrai più onPageFinished (e onPageStarted). E se hai diversi reindirizzamenti, potrebbe anche fallire. Questo approccio penso che risolve tutti i problemi:

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

Se si vuole semplicemente per mostrare i progressi prima del caricamento pagina web in WebView. Si può semplicemente richiedere Caratteristica finestra di avanzamento come

getWindow().requestFeature(Window.FEATURE_PROGRESS); 

prima setContentView(R.layout.blahblah);

e mostrarlo progredire nella onProgressChanged come

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

E se si desidera aggiungere il proprio ProgressDialog quindi utilizzare 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); 

Il codice qui sopra mostra un dialogo di progresso per ogni link in entrata si naviga al di WebView.