WebView lädt mein HTML nicht zum zweiten Mal?

Ich habe eine kleine Aktivität erstellt, die in der Lage ist, zwei verschiedene HTML-Strings in einer Webansicht zu laden. Wenn ich die Aktivität ausführt, fängt es an, den String aus der Variable page_1 zu laden. So weit, ist es gut. Die Seite wird wie erwartet angezeigt. Ich habe einen onFling-Listener hinzugefügt, der die Aktivität den Inhalt der Variablen page_2 laden soll. Das Problem ist, dass, obwohl die onFling aufgerufen wird und die loadUrl heißt die Webview ist nicht aktualisiert?

Meine Tätigkeit sieht so aus:

  • @Override Annotation in Android
  • Wie kann man den Hintergrund der Android-Anwendung setzen?
  • Was ist Touch-Modus und warum ist es wichtig für die * ActivityTestRule * Klasse?
  • Fling Gestenerkennung im Rasterlayout
  • Android-Benachrichtigung im Hintergrund, wenn App geschlossen?
  • Navigationsschublade - was macht syncState () und warum sollte es auf onPostCreate () aufgerufen werden?
  • import android.app.Activity; import android.os.Bundle; import android.view.GestureDetector; import android.view.MotionEvent; import android.view.View; import android.view.View.OnTouchListener; import android.webkit.WebView; public class Test extends Activity { private GestureDetector mGestureDetector; private WebView mWebView; private int mPageIndex; private static final String page_1 = "<html><body>Hello page 1</body></html>"; private static final String page_2 = "<html><body>Hello page 2</body></html>"; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.test); mWebView = (WebView) findViewById(R.id.webview); mWebView.loadData(page_1, "text/html", "utf-8"); setupGestureDetection(); mPageIndex = 0; } private void setupGestureDetection() { mGestureDetector = new GestureDetector(new MyGestureDetector()); mWebView.setOnTouchListener(new OnTouchListener() { public boolean onTouch(View v, MotionEvent event) { return mGestureDetector.onTouchEvent(event); } }); } class MyGestureDetector extends GestureDetector.SimpleOnGestureListener { private static final int SWIPE_DISTANCE_THRESHOLD = 120; private static final int SWIPE_VELOCITY_THRESHOLD = 200; private boolean isHorizontalSwipe(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { if (Math.abs(velocityX) > SWIPE_VELOCITY_THRESHOLD) { if (Math.abs(e1.getX() - e2.getX()) > SWIPE_DISTANCE_THRESHOLD) { return true; } } return false; } @Override public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { if (isHorizontalSwipe(e1, e2, velocityX, velocityY)) { if (e1.getX() > e2.getX()) { // Right to left if (++mPageIndex % 2 == 0) { mWebView.loadData(page_1, "text/html", "utf-8"); } else { mWebView.loadData(page_2, "text/html", "utf-8"); } return true; } } return false; } } } 

    Mein Layout sieht so aus:

     <?xml version="1.0" encoding="utf-8"?> <WebView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/webview" android:layout_width="fill_parent" android:layout_height="fill_parent" /> 

    Ich hoffe jemand kann mir helfen! 🙂

    Freundliche Grüße

    Stig Andersen

  • Wie finde ich die Geschwindigkeit nur mit Beschleunigungssensoren?
  • Möglichkeiten, eine Android-App im Hintergrund in den Vordergrund zu bringen
  • Eclipse: Fehler beim Initialisieren von Monitor-Thread: Die Loopback-Verbindung konnte nicht hergestellt werden
  • Android Studio Git .gitignore vs Projekt> Einstellungen> Versionskontrolle> Ignorierte Dateien
  • Binden Sie Service auf Aktivität in Android
  • Android: Intercept AJAX Anruf von WebView
  • 3 Solutions collect form web for “WebView lädt mein HTML nicht zum zweiten Mal?”

    Zuerst versuchen, WebView#loadData(String, String, String) wie die Pest zu vermeiden – es ist ein Buggy pos Verwenden Sie WebView#loadDataWithBaseURL(String, String, String, String, String) stattdessen.

    Weiterhin wird das Problem behoben. Counter-intuitiv ich weiß, aber hey, es ist der Android-Weg.

      @Override public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { if (isHorizontalSwipe(e1, e2, velocityX, velocityY)) { if (e1.getX() > e2.getX()) { // Right to left if (++mPageIndex % 2 == 0) { mWebView.loadDataWithBaseURL(null, page_1, null, "utf-8", null); } else { mWebView.loadDataWithBaseURL(null, page_2, null, "utf-8", null); } // Seriously. You must return false for the loadDataWithBaseURL to work. Not kidding. So you could skip this return. return false; } } return false; } 

    Diese Lösungen funktionierten nicht für mich. Was gelegentlich gearbeitet hat, löscht den Cache und die Geschichte vor dem Laden der Daten (loadData arbeitete in diesem Fall):

     webView.clearCache(true); webView.clearHistory(); webView.loadData(html, "text/html", "UTF-8"); 

    Hoffe das wird helfen

    Diejenigen, die noch das Problem haben, fand ich eine schnelle Lösung nur einen Handler für diese

     Handler handler = new Handler(); handler.postDelayed(new Runnable() { @Override public void run() { webView.loadDataWithBaseURL("", html, "text/html", "UTF-8", null); } }, 10) ; 
    Das Android ist ein Google Android Fan-Website, Alles über Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.