Android WebView - 1st LoadData()工作正常,后续调用不更新显示

时间:2010-11-04 12:47:53

标签: android loaddata

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

然后第二次调用LoadData()只能获取onPageFinished ... onPageStarted永远不会触发!

解决方法是在LoadData()之后调用.reload(),但这会在活动中的其他逻辑中导致各种问题。

为什么LoadData()不能多次工作?

我使用非常简单的HTML,因为使用.reload()使它工作我的LoadData()语句似乎不是问题。

任何想法都会有所帮助,TIA

7 个答案:

答案 0 :(得分:30)

使用

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

它工作正常。下次加载数据时,loaddata不会刷新。

答案 1 :(得分:14)

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

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

......为我做了诀窍。这看起来有点脏,但我不敢违反谷歌!我不确定是否有其他人这样做,但我只是加载了一个字符串,因为我从一个"资产中读取了。"我用它来显示帮助文档。所以我没有使用任何实际的网址;我只是将WebView用作HTML渲染器。

注意:对于那些新手(就像我大约一个月前一样),请务必更换" WebView"使用变量的实例。这些不是静态方法。

答案 2 :(得分:2)

这种方法可行

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

答案 3 :(得分:2)

那些仍然遇到问题的人我找到了一个快速的解决方案,只需使用一个处理程序

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

答案 4 :(得分:1)

您需要在主线程

中加载dataWithBaseURL

答案 5 :(得分:-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();
     }
   } 
 } 

答案 6 :(得分:-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");