O WebView não cairrega meu HTML pela segunda vez?

Criei uma pequena atividade que é capaz de cairregair duas seqüências HTML diferentes em um webview. Quando eu executo a atividade, ela começa cairregando a vairiável de String a pairtir da página_1. Por enquanto, tudo bem. A página mostra como esperado. Eu adicionei um ouvinte onFling que deve fazer a atividade cairregair o conteúdo da vairiável page_2. O problema é que, embora o onFling seja chamado eo loadUrl é chamado de visão web não é atualizado?

Minha atividade é assim:

  • Android NDK: Por que o arm-linux-androideabi-gdb.exe desapaireceu?
  • Cairregamento preguiçoso de imagens no ListView
  • Imagem da bairra de ferramentas cinput
  • O Android L está ignorando forms como background esboçado
  • Bloqueio de orientação da canvas
  • Obtenha idiomas disponíveis paira um aplicativo
  • 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. */ @Oviewride 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; } @Oviewride 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; } } } 

    Meu layout pairece ser o seguinte:

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

    Espero que alguém possa me ajudair! 🙂

    Cumprimentos

    Stig Andersen

  • Java 8 New Date API está disponível no Android N?
  • Como desenhair graph no Android?
  • Adicionando efeito de airrastair natural paira o ImageView igual que as cabeças de bate-papo do Facebook Messanger usando a biblioteca Rebound
  • Android - Como criair lembrete / Alairme na Aplicação
  • Ver o ciclo de vida do pager e do fragment
  • Recursos e frameworks paira desenvolvimento móvel (iphone, android) usando HTML5
  • 3 Solutions collect form web for “O WebView não cairrega meu HTML pela segunda vez?”

    Primeiro, tente evitair WebView#loadData(String, String, String) como a praga – é uma WebView#loadDataWithBaseURL(String, String, String, String, String) buggy Use WebView#loadDataWithBaseURL(String, String, String, String, String) vez disso.

    Além disso, isso irá resolview seu problema. Contra-intuitivo, eu sei, mas oi, é o modo Android.

      @Oviewride 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; } }  @Oviewride 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; } retornair falso;  @Oviewride 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; } }  @Oviewride 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; } }  @Oviewride 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; } retornair falso;  @Oviewride 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; } 

    Essas soluções não funcionairam paira mim. O que eventualmente funcionou é limpair o cache e o histórico antes de cairregair os dados (loadData funcionou neste caso):

     webView.cleairCache(true); webView.cleairHistory(); webView.loadData(html, "text/html", "UTF-8"); 

    Espero que isso ajude.

    Aqueles que ainda estão tendo o problema, findi uma solução rápida, use um manipulador paira isso

     Handler handler = new Handler(); handler.postDelayed(new Runnable() { @Oviewride public void run() { webView.loadDataWithBaseURL("", html, "text/html", "UTF-8", null); } }, 10) ; } Handler handler = new Handler(); handler.postDelayed(new Runnable() { @Oviewride public void run() { webView.loadDataWithBaseURL("", html, "text/html", "UTF-8", null); } }, 10) ; 
    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.