onPageStart viele Male aufgerufen und onPageFinished nicht aufgerufen, für eine einzige Seite
Meine Frage ist, unterscheidet sich von diese man Jungs..
Ich wany meine Fortschritts-dialog starten, wenn die Seite zu laden beginnt und endet, wenn das laden der Seite fertig in meinem webview. Mein problem ist der Fortschritts-dialog startet, und nie abgewiesen.Ich habe Haltepunkte setzen, es zeigt, dass die Fortschritts-dialog startet und Holen Sie entlassen, viele Male, dann fängt es an, und nicht entlassen, auch nach laden der Seite abgeschlossen. Meine Frage ist, warum die onPageStarted immer ausgeführt, viele Zeit für eine einzelne Seite geladen wird?
und warum onPageFinished nicht genannt, nach der Fertigstellung der Seite laden?
myWebView.setWebViewClient(new WebViewClient(){
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
myWebView.loadUrl(url);
return true;
}
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
super.onPageStarted(myWebView, url, favicon);
Log.d("mytag","Page Loading Started");
//myURLProgressDialog= ProgressDialog.show(WebviewExampleActivity.this, "Page Loading", "Wait for a moment...");
}
@Override
public void onPageFinished(WebView view, String url) {
Log.d("mytag","Page Loading Finished!");
super.onPageFinished(myWebView, url);
//myURLProgressDialog.dismiss();
}
});
Mein selbst tagged gefilterten Log ist, Wie dies für die be-eine einzige Seite:
10-06 10:32:49.298: DEBUG/mytag(508): Page Loading Started
10-06 10:32:49.998: DEBUG/mytag(508): Page Loading Started
10-06 10:32:50.048: DEBUG/mytag(508): Page Loading Finished!
10-06 10:32:50.048: DEBUG/mytag(508): Page Loading Started
10-06 10:33:00.898: DEBUG/mytag(508): Page Loading Finished!
Wenn ich auf Verbindung über eine bereits geladene Seite, es funktioniert gut. Hier ist
Log:
10-06 10:59:25.098: DEBUG/mytag(543): Page Loading Started
10-06 10:59:30.889: DEBUG/mytag(543): Page Loading Finished!
- Ich denke, es ist genauer für
shouldOverrideUrlLoading
Sie nicht, laden Sie die url, und einfach zurückfalse
. Siehe dieses tutorial von Jakob Jenkov für eine klare Erklärung dafür.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Prüfen, ob es bereits offen ist, mit
.isShowing()
.onPageStarted
Aufruf scheint nicht zu haben eine entsprechende aufPageFinished
Aufruf.Wenn Sie ajax-Aufrufe in die Seite geladen wird, onPageFinished() wird nur aufgerufen werden, wenn diese Anrufe fertig.
Besser, diese Aufrufe mit einem Fenster.setTimeout(). In diesem Fall UI thread wird nicht blockiert, auf denen Anrufe und onPageFinished() wird aufgerufen, sobald das Haupt-Seite geladen.
Passiert manchmal, dass, wenn die erste Seite geladen, einige script macht ein redirect (denn es benötigt eine session-ID, oder etwas, das würde die Seite erneut geladen werden).
Können Sie prüfen, ob eine andere Seite (oder die gleiche, mit zusätzlichen Parametern) geladen wird durch die Protokollierung der url-parameter.
Ich denke, dass, wenn Sie eine neue laden-Antrag gestellt wird, bevor die erste Seite fertig geladen ist, dann die OnPageFinished Methode nicht aufgerufen werden, für die erste Seite.
Hier ist eine Lösung. Statt der laden-dialog, ich einen anderen webview als splash-screen, aber man kann es leicht ändern.
Der trick ist, zu schauen, ob es eine neue "onpagestart" direkt nach dem "onpagefinished". Wenn dies der Fall ist, schließen Sie nicht die be-und warten, bis die nächste "onpagefinished".
Wenn eine Seite reichen auf webview app: onPageStarted Entlassen, aber onPageFinished nicht Ausgelöst, so Folgen Sie folgenden code behoben und genau