Wie kann ich meinen Fortschrittsdialog abschließen, nachdem Webview geladen ist?

Was brauche ich zu meinem Code, um den Dialog abzuschließen dismiss() nach dem Laden der Webansicht?

 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 es versucht

  • Android - Ergebnis von AsyncTask wird nicht an die Hauptaktivität zurückgegeben
  • Mit sowohl setOnItemClickListener als auch setOnItemLongClickListener beide Hörer gefeuert dieselbe Zeit oder arbeitet selben time.Why
  • libgdx-Spiel stürzt auf einigen Geräten ab
  • Imageview Höhe als wrap_content des gezeigten Bildes
  • Das Rendering einer kleinen Region der großen Bitmap ist zeitaufwendig
  • Synchronisierung von Daten zwischen Android App und Webserver
  •  public void onPageFinshed(WebView view, String url){ pd.dismiss(); } 

    Funktionierte nicht

  • Wie füttere ich DatePicker-Widget mit anderen Kalendersystemen?
  • Android RelativeLayout Farbe ändern aufKlicken
  • Android-Version überprüfen
  • Speichern des Android-Aktivitätsstatus mit dem Save Instance State
  • Designmuster für das Fangen von unbehandelten Ausnahmen in AsyncTask
  • Animierte Ansicht, die aus einer anderen Ansicht herausschiebt und die Ansichten unterhalb des Weges drückt
  • 6 Solutions collect form web for “Wie kann ich meinen Fortschrittsdialog abschließen, nachdem Webview geladen ist?”

    : O webview.setWebViewClient (neuer homeClient ()); HomeClient () ????

    Versuche dies

     ... ... ... 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: Das ist ein gutes Beispiel.

    Android WebView und die Indeterminant Progress Solution

    Das ist in Ordnung.

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

    @Jorgesys das ist nicht 100% genau. Wenn du mehrere iframes auf einer Seite hast, hast du mehrere onPageFinished (und onPageStarted). Und wenn du mehrere Umleitungen hast, kann es auch scheitern. Dieser Ansatz, den 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; } } }); 

    Wie kommst du auf pd in onPageFinshed() ? (Und sind Sie sicher, dass es eigentlich angerufen wird, wenn die Seite geladen wird?)

    In deinem onCreate() versuchst du pd zu deinem homeClient damit homeClient sich um den Dialog homeClient kann.

    Ihr HomeClient sollte so 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 deinem onCreate() :

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

    Wenn Sie einfach nur Fortschritt zeigen möchten, bevor das WebPage in WebView geladen wird. Sie können einfach für Window Feature Progress wie

     getWindow().requestFeature(Window.FEATURE_PROGRESS); 

    Vor setContentView(R.layout.blahblah);

    Und zeigen sie Fortschritte bei onProgressChanged wie

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

    Und wenn du deinen eigenen ProgressDialog hinzufügen möchtest, dann benutze 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); 
     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 oben genannte Code zeigt einen Fortschrittsdialog für jeden eingehenden Link, den du zum Webview navigierst.

    Das Android ist ein Google Android Fan-Website, Alles ├╝ber Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.