2010-11-04 91 views
13

第一次調用LoadData()後,onLoadResource事件觸發,因爲它應該和顯示正常。接下來,我想用新頁面刷新屏幕,當第二次頁面不更新時使用LoadData()並且onLoadResource()不會消失。Android WebView - 第一LoadData()工作正常,後續調用不會更新顯示

然後第二次調用LoadData()僅發生onPageFinished ... onPageStarted從不會觸發!

解決方法是在LoadData()之後調用.reload(),但會在活動中的其他邏輯期間導致各種問題。

爲什麼LoadData()不能工作多次?

我使用的是非常簡單的HTML,由於使用.reload()使它工作,我的LoadData()語句似乎不是問題。

任何想法將是有益的,TIA

回答

22

使用

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

它工作正常。在下次加載數據時,loaddata不會刷新。

+0

任何人都得到了,爲什麼這個作品的解釋問題loadDataWithBaseURL?也調用loadData兩次工作(反正在KitKat上),但這個解決方案至少看起來好像它是一個黑客 – Rodney 2015-09-21 08:54:17

+0

嗯......我一定錯過了一些東西,但是所有出現的是一個空白頁,單詞'data'對此 – rikkitikkitumbo 2016-11-21 06:02:22

+0

的原因。 – 2017-08-27 05:47:53

2

這種做法將工作

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

我能夠通過給html文檔不同的ID,每次使每個更新的瀏覽器刷新:請參見下面的//網頁流量。

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(); 
    } 
    } 
} 
-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"); 
11

出於某種原因,你必須首先明確的內容。 「加載...」方法似乎沒有明確附加他們的內容,但它不起作用。我認爲它曾經是WebView.clearView()但這已被棄用。 Android site上不贊成使用的方法的文檔實際上告訴您使用WebView.loadUrl("about:blank")作爲該方法的替代方法。所以...

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

......對我來說是訣竅。這似乎有點骯髒,但我不敢違抗谷歌!我不確定是否有其他人正在這樣做,但我只是加載了一個字符串,因爲我已經閱讀了「資產」。我正在使用它來顯示幫助文檔。所以我沒有使用任何實際的URL;我只是使用WebView作爲HTML渲染器。

注意:對於那些新手(像我只有大約一個月前),確保將「WebView」替換爲您的變量的一個實例。這些不是靜態方法。

0

您需要主線程

+0

添加一些解釋這將如何幫助OP在修復問題 – 2016-02-18 05:45:31

1

那些誰仍然有我找到了一個快速的解決方案只需使用一個處理程序這個

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