2010-07-19 13 views
6

Co jest potrzebne do mojego kodu do utworzenia okna dialogowego dismiss() po załadowaniu przeglądarki internetowej?Jak mogę odrzucić okno dialogowe postępu po załadowaniu przeglądarki internetowej?

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

     } 

Próbowałem

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

Nie działa.

+0

Czy nazywa się onPageFinished? W wątku interfejsu użytkownika? –

+0

Przepraszam, że powinienem był to zrobić na pierwszym miejscu, postawiłem całą klasę tak, jakbym ją posiadał. a jeśli przewiniesz w górę, widzisz, że próbowałem on onPageFinshed i nie działało. może sposób, w jaki to zrobiłem, był zły? lub gdzie ją umieściłem? – brybam

Odpowiedz

16

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

spróbować tej

... 
... 
... 

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

} 

Aktualizacja :: ten jest dobrym przykładem.

Android WebView and the Indeterminant Progress Solution

+1

Ten przykład zrobił trik, dzięki! – brybam

+1

To jest bilet! – Atma

1

W jaki sposób uzyskujesz dostęp do pd w onPageFinshed()? (I jesteś pewien, że faktycznie nazywa się po załadowaniu strony?)

w twojej onCreate(), spróbuj przechodząc pd do homeClienthomeClient tak że można dbać o odwoływanie okno.

Twój homeClient powinna wyglądać następująco:

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

W swojej onCreate():

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

Bardzo ładny przykład, lubię to! – IamStalker

+0

Fajnie ... ta część, której brakowało mi przez kilka minut. – MbaiMburu

3

Jest 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

Hej samuel Użyłem kodu QR dla odsłon stron internetowych dla pierwszego uruchomienia, wszystko działa dobrze. więc kiedy nawiguję do tej samej przeglądarki po raz drugi progressdialog wyświetla się stale po pagefinish (uwaga: czekano na 10 minut, ale okno dialogowe postępu nie odrzuciło) Proszę pomóżcie mi jak mogę zrobić tat .. z góry dziękuję ... –

3

@Jorgesys to nie jest w 100% dokładne. Jeśli masz kilka elementów iframe na stronie, będziesz mieć wiele opcji onPageFinished (i onPageStarted). A jeśli masz kilka przekierowań, może również zawieść. Podejście to myślę rozwiązuje wszystkie problemy:

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

Jeśli po prostu chcesz pokazać postępów przed załadunkiem internetową w WebView. można po prostu poprosić o Okno Feature Progress jak

getWindow().requestFeature(Window.FEATURE_PROGRESS); 

przed setContentView(R.layout.blahblah);

i pokazać, że postęp w onProgressChanged jak

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

A jeśli chcesz dodać jesteś właścicielem ProgressDialog następnie użyj 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); 

Powyższy kod wyświetli dialog postępu dla każdego połączenia przychodzącego możesz przejść do w WebView.

Powiązane problemy