2010-07-19 26 views
6

Web görünümünden sonra iletişim kutusunu dismiss() yapmak için koduma neye ihtiyacım var?Webview yüklendikten sonra ilerleme iletişimimi nasıl kapatabilirim?

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

     } 

ben işe yaramadı

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

denedim.

+0

onPageFinished denir? UI'de mi? –

+0

Üzgünüm Bunu ilk etapta yapmalıydım, tüm Sınıfı şu anki haliyle hazırladım. ve eğer yukarı kaydırırsanız bir onPageFinshed denedim ve işe yaramadı görebilirsiniz. belki benim yaptığım şey yanlıştı? ya da nereye yerleştirdim? – brybam

cevap

16

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

bu

... 
... 
... 

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

} 

Güncelleme deneyin :: bu iyi bir örnektir.

Android WebView and the Indeterminant Progress Solution

+1

Bu örnek hile yaptı, teşekkürler! – brybam

+1

Bu bilet! – Atma

1

onPageFinshed()'da pd'a nasıl erişiyorsunuz? (Ve aslında denir eminiz sayfa yüklendiğinde?) Olarak

senin onCreate(), iletişim kutusu kapatıldıktan senin alabilir homeClienthomeClient böylece bakıma pd geçen deneyin.

Kişisel homeClient bu gibi görünmelidir:

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

sizin onCreate() yılında:

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

Çok güzel örnek, beğendim! – IamStalker

+0

Serin ... şu an için kayıp olduğum kısım. – MbaiMburu

3

Bu sorun yok.

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 İlk lansman için her şey iyi çalışıyor, web görünümleri için ur kodu kullandım. Bu yüzden ikinci kez progressungösterim için aynı web gösterisine gittiğimde (sayfa: 10 dakika bekledim ama ilerleme diyaloğu reddetmedi) Lütfen bana nasıl tat yapabileceğimi biliyorum .. şimdiden teşekkürler ... –

3

@Jorgesys bu% 100 doğru değildir. Bir sayfada birkaç iframe varsa, birden fazla onPageFinished (ve onPageStarted) olacaktır. Ve birkaç yönlendirmeniz varsa, başarısız olabilir.

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

sadece WebView'da web sayfasını yüklerken önce İlerleme göstermek istiyorsanız: bence bu yaklaşım tüm sorunları çözer. Sen setContentView(R.layout.blahblah);

önce

getWindow().requestFeature(Window.FEATURE_PROGRESS); 

gibi İlerlemePencere Özelliği için talep edebilir,

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

gibi onProgressChanged ilerleme göstermek Ve eklemek istiyorsanız ProgressDialog sahibi basitçe yapabilirsiniz daha sonra WebviewClient

'yı kullanın.
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); 

Yukarıdaki kod Web görünümündeki içinde gezinmek her gelen bağlantı için bir ilerleme diyalog gösterecektir.

İlgili konular