19

在第一次调用 LoadData() 之后,onLoadResource 事件会按原样触发,并且显示正常。接下来我想用新页面刷新屏幕,当我第二次使用 LoadData() 页面没有更新并且 onLoadResource() 不会触发时。

然后第二次调用 LoadData() 只会触发 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

出于某种原因,您必须先清除内容。“加载...”方法似乎没有明确附加它们的内容,但它不起作用。我认为它曾经是,WebView.clearView()但已被弃用。Android网站上不推荐使用的方法的文档实际上告诉您使用WebView.loadUrl("about:blank")该方法的替代方法。所以...

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

...对我有用。看起来有点脏,但我不敢违抗谷歌!我不确定是否有其他人在这样做,但我只是在加载我从“资产”中读取的字符串。我用它来显示帮助文档。所以我没有使用任何实际的 URL;我只是将 WebView 用作 HTML 渲染器。

注意:对于那些新手(就像我大约一个月前一样),请确保将“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

您需要在主线程中加载DataWithBaseURL

于 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 回答