Intereting Posts
Как сохранить изображения с камеры в Android в определенную папку? Загрузка с помощью spinner sqlite с текстом и значением Как добавить рекламу в приложения для Android? Android Central Keystore Как центрировать взгляд с помощью RelativeLayout? Почему мой андроид spinner отображает переключатель в текстовом виде? Android-PhoneGap / WebView игнорирует метатеги просмотров? Перерисовать одну строку в listview Как сбрасывать неактивную память в Android программно? Как реализовать бесконечный список с помощью RecyclerView? Разрешить только iphone / ipad / ipod / android для доступа к файлам в directoy, все остальные перенаправляются на google.com Библиотека поддержки Android значительно увеличивает размер APK Обновления местоположения не работают в помещении, как утверждают API-интерфейсы поставщика Fusion Location MediaMetadataCompat Extras Прокрутка галереи позволяет нажатию и удаляет прослушиватель кликов из подпунктов

WebView не загружает мой HTML второй раз?

Я создал небольшую активность, которая способна загружать две различные строки HTML в веб-просмотр. Когда я запускаю Activity, он начинается с загрузки String из переменной page_1. Все идет нормально. Страница отображается как ожидалось. Я добавил слушателя onFling, который должен заставить загрузку содержимого содержимого переменной page_2. Проблема в том, что даже если вызывается onFling и вызывается loadUrl, веб-просмотр не обновляется?

Моя деятельность выглядит так:

import android.app.Activity; import android.os.Bundle; import android.view.GestureDetector; import android.view.MotionEvent; import android.view.View; import android.view.View.OnTouchListener; import android.webkit.WebView; public class Test extends Activity { private GestureDetector mGestureDetector; private WebView mWebView; private int mPageIndex; private static final String page_1 = "<html><body>Hello page 1</body></html>"; private static final String page_2 = "<html><body>Hello page 2</body></html>"; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.test); mWebView = (WebView) findViewById(R.id.webview); mWebView.loadData(page_1, "text/html", "utf-8"); setupGestureDetection(); mPageIndex = 0; } private void setupGestureDetection() { mGestureDetector = new GestureDetector(new MyGestureDetector()); mWebView.setOnTouchListener(new OnTouchListener() { public boolean onTouch(View v, MotionEvent event) { return mGestureDetector.onTouchEvent(event); } }); } class MyGestureDetector extends GestureDetector.SimpleOnGestureListener { private static final int SWIPE_DISTANCE_THRESHOLD = 120; private static final int SWIPE_VELOCITY_THRESHOLD = 200; private boolean isHorizontalSwipe(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { if (Math.abs(velocityX) > SWIPE_VELOCITY_THRESHOLD) { if (Math.abs(e1.getX() - e2.getX()) > SWIPE_DISTANCE_THRESHOLD) { return true; } } return false; } @Override public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { if (isHorizontalSwipe(e1, e2, velocityX, velocityY)) { if (e1.getX() > e2.getX()) { // Right to left if (++mPageIndex % 2 == 0) { mWebView.loadData(page_1, "text/html", "utf-8"); } else { mWebView.loadData(page_2, "text/html", "utf-8"); } return true; } } return false; } } } 

Мой макет выглядит так:

 <?xml version="1.0" encoding="utf-8"?> <WebView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/webview" android:layout_width="fill_parent" android:layout_height="fill_parent" /> 

Я надеюсь, что кто-то может мне помочь! 🙂

С наилучшими пожеланиями

Стиг Андерсен

Solutions Collecting From Web of "WebView не загружает мой HTML второй раз?"

Во-первых, старайтесь избегать WebView#loadData(String, String, String) как чума – это багги pos WebView#loadDataWithBaseURL(String, String, String, String, String) используйте WebView#loadDataWithBaseURL(String, String, String, String, String) .

Кроме того, это устранит вашу проблему. Контр-интуитивный я знаю, но эй, это способ Android.

  @Override public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { if (isHorizontalSwipe(e1, e2, velocityX, velocityY)) { if (e1.getX() > e2.getX()) { // Right to left if (++mPageIndex % 2 == 0) { mWebView.loadDataWithBaseURL(null, page_1, null, "utf-8", null); } else { mWebView.loadDataWithBaseURL(null, page_2, null, "utf-8", null); } // Seriously. You must return false for the loadDataWithBaseURL to work. Not kidding. So you could skip this return. return false; } } return false; } 

Эти решения не помогли мне. Что в конечном итоге сработало, очистка кеша и истории перед загрузкой данных (loadData работал в этом случае):

 webView.clearCache(true); webView.clearHistory(); webView.loadData(html, "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) ;