19

LoadData()の最初の呼び出しの後、イベントonLoadResourceが正常に発生し、表示は正常です。次に、新しいページで画面を更新したいのですが、2回目にLoadData()を使用すると、ページが更新されず、onLoadResource()が起動しません。

次に、LoadData()への2回目の呼び出しはonPageFinishedのみを起動します... onPageStartedは起動しません!

回避策は、LoadData()の後に.reload()を呼び出すことでしたが、これにより、アクティビティの他のロジック中にあらゆる種類の問題が発生します。

LoadData()が複数回機能しないのはなぜですか?

私は非常に単純なHTMLを使用していますが、.reload()を使用すると機能するため、LoadData()ステートメントは問題ではないようです。

どんなアイデアも役に立ちます、TIA

4

7 に答える 7

33

使用する

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

それはうまくいきます。loaddata次回データがロードされたときに更新されません。

于 2011-01-28T21:55:26.430 に答える
16

何らかの理由で、最初にコンテンツをクリアする必要があります。「load...」メソッドは、コンテンツを明示的に追加していないようですが、機能しません。以前はそうであったと思いますWebView.clearView()が、それは非推奨になりました。Androidサイトの非推奨のメソッドのドキュメントには、実際にはWebView.loadUrl("about:blank")そのメソッドの代わりに使用するように指示されています。それで...

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

...私のためにトリックを行います。少し汚いようですが、グーグルに逆らうつもりはありません!他の誰かがこれを行っているかどうかはわかりませんが、「アセット」から読み取った文字列を読み込んでいます。ヘルプドキュメントを表示するために使用しています。したがって、実際のURLは使用していません。WebViewをHTMLレンダラーとして使用しています。

注:初心者の場合(約1か月前の私のように)、必ず「WebView」を変数のインスタンスに置き換えてください。これらは静的メソッドではありません。

于 2015-03-03T16:05:24.873 に答える
3

まだ問題を抱えている人は、簡単な解決策を見つけました。これにはハンドラーを使用するだけです。

    Handler handler = new Handler();
    handler.postDelayed(new Runnable() {
        @Override
        public void run() {
            webView.loadDataWithBaseURL("", html, "text/html", "UTF-8", null);
        }
    }, 10) ;
于 2017-05-11T13:32:54.030 に答える
2

そのようなアプローチはうまくいくでしょう

webView.loadDataWithBaseURL("fake-url", "<html></html>", "text/html", "UTF-8", null);
webView.loadData(htmlBuilder.toString(), "text/html", "UTF-8");
于 2011-10-23T15:55:49.933 に答える
1

メインスレッドでLoadDataWithBaseURLを実行する必要があります

于 2016-02-18T05:20:59.457 に答える
-1

htmlドキュメントに毎回異なるIDを与えることで、更新のたびにブラウザを更新することができました。以下の//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();
     }
   } 
 } 
于 2013-08-27T14:24:11.303 に答える
-1
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");
于 2014-09-22T17:50:55.567 に答える