2010-07-19 13 views
6

Was benötige ich zu meinem Code, um den Dialog dismiss() nach dem Laden der Webansicht zu erstellen?Wie kann ich meinen Fortschrittsdialog ablehnen, nachdem Webview geladen wurde?

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

     } 

Ich habe

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

Hat nicht funktioniert.

+0

Wird onPageFinished aufgerufen? Im UI-Thread? –

+0

Entschuldigung, ich hätte das zuerst machen sollen, ich habe die ganze Klasse so aufgestellt, wie ich sie gerade habe. und wenn Sie nach oben scrollen können Sie sehen, ich habe versucht, ein onPageFinshed und es hat nicht funktioniert. vielleicht war die Art, wie ich es gemacht habe, falsch? oder wo ich es platziert habe? – brybam

Antwort

16

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

versuchen, diese

... 
... 
... 

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

} 

Update :: dies ein gutes Beispiel ist.

Android WebView and the Indeterminant Progress Solution

+1

Dieses Beispiel hat es geschafft, danke! – brybam

+1

Das ist das Ticket! – Atma

1

Wie greifen Sie auf pd in onPageFinshed()? (Und sind Sie sicher, es heißt eigentlich, wenn die Seite geladen wird?)

In Ihrem onCreate(), versuchen Sie vorbei pd auf Ihre homeClient so dass homeClient kümmern können den Dialog zu entlassen.

Ihre homeClient sollte wie folgt aussehen:

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

In Ihrem onCreate():

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

Sehr schönes Beispiel, ich mag es! – IamStalker

+0

Cool ... der Teil, den ich seit Minuten vermisse. – MbaiMburu

3

Das ist 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

Hey Samuel Ich habe ur-Code für Webviews für den ersten Start verwendet alles funktioniert gut. Wenn ich also zum zweiten Mal zum selben Webview navigiere, wird der Fortschrittdialog nach dem Seitenende angezeigt (Hinweis: Ich habe 10 Minuten gewartet, aber der Fortschrittsdialog wurde nicht geschlossen) Bitte hilf mir, wie kann ich tat .. danke im voraus ... –

3

@Jorgesys dies ist nicht 100% genau. Wenn Sie mehrere Iframes auf einer Seite haben, haben Sie mehrere onPageFinished (und onPageStarted). Und wenn Sie mehrere Weiterleitungen haben, kann es auch fehlschlagen. Dieser Ansatz ich denke, löst alle Probleme:

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

Wenn Sie einfach nur Fortschritte in der WebView vor webPage Laden zeigen möchten. Sie können einfach anfordern für Fensterfunktion Fortschritt wie

getWindow().requestFeature(Window.FEATURE_PROGRESS); 

vor setContentView(R.layout.blahblah);

und zeigen Sie es wie

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

in onProgressChanged Fortschritt und wenn Sie hinzufügen möchten, besitzen Sie ProgressDialog Verwenden Sie dann 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); 

Der obige Code wird einen Fortschrittsdialog zeigt für jeden eingehenden Link zu der Sie in webview navigieren.