Ответ 1
Использование
webview.loadDataWithBaseURL("same://ur/l/tat/does/not/work", "data", "text/html", "utf-8", null);
он отлично работает. loaddata
не обновляется в следующий раз при загрузке данных.
После первого вызова функции LoadData() событие onLoadResource срабатывает, как и должно быть, и дисплей в порядке. Затем я хочу обновить экран с помощью новой страницы, когда я использую LoadData() во второй раз, когда страница не обновляется, а onLoadResource() НЕ ПОЖАРАЕТ.
Затем второй вызов LoadData() onlyfires onPageFinished... onPageStarted никогда не срабатывает!
Обходной задачей было вызвать .reload() после LoadData(), но это вызывает всевозможные проблемы во время другой логики в активности.
Почему функция LoadData() работает несколько раз?
Я использую чрезвычайно простой HTML, и поскольку использование .reload() заставляет его работать, мой оператор LoadData(), похоже, не является проблемой.
Любые идеи были бы полезны, TIA
Использование
webview.loadDataWithBaseURL("same://ur/l/tat/does/not/work", "data", "text/html", "utf-8", null);
он отлично работает. loaddata
не обновляется в следующий раз при загрузке данных.
По какой-то причине вы должны сначала очистить контент. Методы "load...", похоже, явно не добавляют их содержимое, но это не работает. Я думаю, что это было WebView.clearView()
, но это было устарело. Документ для устаревшего метода на веб-сайте Android фактически говорит вам использовать WebView.loadUrl("about:blank")
в качестве замены для этого метода. Так что...
WebView.loadUrl("about:blank");
WebView.loadData(data, mime, encoding);
... делает трюк для меня. Кажется, немного грязно, но я бы не осмелился нарушить Google! Я не уверен, что кто-то еще это делает, но я просто загружаю строку, которую я прочитал из "актива". Я использую его для отображения справки. Поэтому я не использую никаких реальных URL-адресов; Я просто использую WebView как средство визуализации HTML.
Примечание. Для тех новичков (вроде меня только около месяца назад) обязательно замените "WebView" экземпляром вашей переменной. Это не статические методы.
Такой подход будет работать
webView.loadDataWithBaseURL("fake-url", "<html></html>", "text/html", "UTF-8", null);
webView.loadData(htmlBuilder.toString(), "text/html", "UTF-8");
Те, у кого все еще есть проблема, я нашел быстрое решение, просто использую обработчик для этого
Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
webView.loadDataWithBaseURL("", html, "text/html", "UTF-8", null);
}
}, 10) ;
Вам нужно загрузитьDataWithBaseURL в основной поток
Мне удалось обновить браузер при каждом обновлении, каждый раз указывая html-документ на другой идентификатор: см. ниже в //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");