Android WebView - 1. Loaddata () funktioniert gut, nicht aktualisieren nachfolgende Anrufe Anzeige

StackOverflow https://stackoverflow.com/questions/4096783

  •  28-09-2019
  •  | 
  •  

Frage

Nach dem ersten Aufruf von Loaddata () das Ereignis onLoadResource Feuer, wie es sollte, und die Anzeige ist in Ordnung. Als nächst ich den Bildschirm mit einer neuen Seite aktualisieren möchte, wenn ich Loaddata () zum zweiten Mal der Webseite nicht aktualisiert und onLoadResource () wird nicht ausgelöst.

Dann zweiter Aufruf von Loaddata () onlyfires onPageFinished ... onPageStarted nie Feuer!

Eine Arbeit war um .reload () aufzurufen, nach Loaddata (), aber das verursacht alle möglichen Probleme während der andere Logik in der Aktivität.

Warum funktioniert Loaddata () Arbeit mehrfach?

Ich bin mit sehr einfacher HTML, und da mit .reload () macht es Arbeit meiner Loaddata () Aussage scheint nicht das Problem zu sein.

Irgendwelche Ideen wäre hilfreich, TIA

War es hilfreich?

Lösung

Mit

webview.loadDataWithBaseURL("same://ur/l/tat/does/not/work", "data", "text/html", "utf-8", null);

es funktioniert gut. loaddata nicht beim nächsten Mal neu geladen werden die Daten geladen werden.

Andere Tipps

Aus irgendeinem Grund haben Sie zunächst den Inhalt zu löschen. Die „Last ...“ Methoden scheinen nicht explizit ihr Gehalt zu anhängt, aber es funktioniert nicht. Ich denke, es verwendet WebView.clearView() zu sein, aber das ist veraltet war. Der Doc für die veraltete Methode auf dem Android Website tatsächlich sagen Sie WebView.loadUrl("about:blank") als Ersatz für diese Methode zu verwenden. So ...

WebView.loadUrl("about:blank");
WebView.loadData(data, mime, encoding);

... funktioniert der Trick für mich. Es scheint ein wenig schmutzig, aber ich würde es nicht wagen Disobey Google! Ich bin nicht sicher, ob jemand anderes tut dies, aber ich bin Laden nur einen String, dass ich von einem gelesen hatte „Gut.“ Ich verwende es Hilfe docs angezeigt werden soll. Also ich bin nicht eine tatsächliche URL verwendet wird; Ich bin nur die WebView als HTML-Renderer.

Hinweis: Für die Neulinge gibt (wie ich nur vor etwa einem Monat) stellen Sie sicher, mit einer Instanz der Variable „WebView“ zu ersetzen. Diese sind nicht statische Methoden.

Ein solcher Ansatz wird Arbeit

webView.loadDataWithBaseURL("fake-url", "<html></html>", "text/html", "UTF-8", null);
webView.loadData(htmlBuilder.toString(), "text/html", "UTF-8");

Diejenigen, die immer noch das Problem haben ich eine schnelle Lösung gefunden verwenden nur einen Handler für diesen

    Handler handler = new Handler();
    handler.postDelayed(new Runnable() {
        @Override
        public void run() {
            webView.loadDataWithBaseURL("", html, "text/html", "UTF-8", null);
        }
    }, 10) ;

Sie müssen loadDataWithBaseURL in Hauptthread

Ich konnte die Aktualisierung des Browsers auf jedem Update machen, indem das HTML-Dokument eine andere ID jedes Mal geben: siehe unten auf // WEBVIEW

.
package com.example.scroll;
// philip r brenan at gmail.com, www.appaapps.com 
import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.util.Log;
import android.webkit.WebView;

public class MainActivity extends Activity
 {protected void onCreate(Bundle savedInstanceState)
   {super.onCreate(savedInstanceState);
    setContentView(new MyWebView(this)); 
   }
  class MyWebView extends WebView 
   {MyWebView(Context Context)
     {super(Context);
      getSettings().setJavaScriptEnabled(true);
      addJavascriptInterface(this, "Android");   
      new Thread()
       {public void run()
         {for(int j = 0; j < 100; ++j)
           {post(new Runnable()
             {public void run()
               {loadData(content(), "text/html", "utf-8"); // Display in browser
               }
             });    
            try {Thread.sleep(5000);} catch(Exception e) {}
           }  
         }
       }.start();
     } 
    int c = 0, C = 1;
    String content() 
     {final StringBuilder s = new StringBuilder();
      //s.append("<html id="+(C++)+"><body>"); // WEBVIEW REFRESHES CORRECTLY *************** 
      s.append("<html><body>");              // WEBVIEW DOES NOT REFRESH ******************

      s.append("<h1 id=11>1111</h1>");
      s.append("<script>location.href = '#22';</script>");
      for(int i = 0; i < 10; ++i) s.append("<p>"+c+c+c); ++c;

      s.append("<h1 id=22>2222</h1>");
      for(int i = 0; i < 10; ++i) s.append("<p>"+c+c+c); ++c;
      Log.e("AAAAAA", "content="+s.toString());
      s.append("</body></html>");
      return s.toString();
     }
   } 
 } 
String urlUnique = String.format("http://%s", java.util.UUID.randomUUID().toString());
                    webView.loadDataWithBaseURL(urlUnique, "<html></html>", "text/html", "UTF-8", null);
                    Thread.sleep(200);
                    webView.loadData(htmlData, "text/html", "UTF-8");
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top