Android: Html Anchor Link funciona sólo una vez en la vista web

Estoy frente a algún extraño problema en webview en el momento de la carga de contenido html con enlace de anclaje.
El siguiente código funciona perfecto para la etiqueta de anclaje, pero sólo una vez .
La segunda vez cuando presiono la etiqueta del ancla no está trabajando.

protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.mywebview); String html = "<html><body><p><a href='#C4'>See also Chapter 4</a></p><p><h2>Chapter 1</h2><p>This chapter explains ba bla bla</p><h2>Chapter 2</h2><p>This chapter explains ba bla bla</p><h2>Chapter 3</h2><p>This chapter explains ba bla bla</p><h2><a name='C4'>Chapter 4</a></h2><p>This chapter explains ba bla bla</p><h2>Chapter 5</h2><p>This chapter explains ba bla bla</p><h2>Chapter 6</h2><p>This chapter explains ba bla bla</p><h2>Chapter 7</h2><p>This chapter explains ba bla bla</p><h2>Chapter 8</h2><p>This chapter explains ba bla bla</p><h2>Chapter 9</h2><p>This chapter explains ba bla bla</p></body></html>"; String mime = "text/html"; String encoding = "utf-8"; WebView myWebView = (WebView)this.findViewById(R.id.webView1); myWebView.loadDataWithBaseURL(null, html, mime, encoding, null); } 

He intentado este acoplamiento pero no trabajado para mí.

ACTUALIZAR:

Resultado de la prueba de mi código en el diverso dispositivo.

Trabajando
1. Samsung S Plus -> 2.3.4
2. Samsung Galaxy Y -> 2.3.6
3. Samsung Galaxy Tab -> 2.3.3
4. Motorola Xoom -> 3.2

No funciona
1. LG Optimus -> 2.2
2. DELL XCD35 (ZTE Blade) -> 2.2
3. HTC WildFire -> 2.2.1

¿Es este tema del SO o algo más? ¿Alguna solución para esto?


El problema era volver a cargar la página de nuevo después de anclar enlace Haga clic en.

He utilizado el siguiente código,

Capítulos.xml en la carpeta Activos

 <html> <body> <p><a href="#C4">See also Chapter 4</a></p> <p><h2><a name='C1'>Chapter 1<a></h2><p>This chapter explains ba bla bla</p> <h2>Chapter 2</h2><p>This chapter explains ba bla bla</p> <h2>Chapter 3</h2><p>This chapter explains ba bla bla</p> <h2><a name='C4'>Chapter 4</a></h2><p>This chapter explains ba bla bla</p> <h2>Chapter 5</h2><p>This chapter explains ba bla bla</p> <h2>Chapter 6</h2><p>This chapter explains ba bla bla</p> <h2>Chapter 7</h2><p>This chapter explains ba bla bla</p> <a href="#C1">See also Chapter 1</a> </body> </html> 

Código JAVA: First Way

 public class MainActivity extends Activity { WebView myWebView; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); myWebView = new WebView(this); myWebView.getSettings().setJavaScriptEnabled(true); myWebView.loadUrl("file:///android_asset/chapters.html"); setContentView(myWebView); final GestureDetector gestureDetector = new GestureDetector( new MyGestureDetector()); View.OnTouchListener gestureListener = new View.OnTouchListener() { public boolean onTouch(View v, MotionEvent event) { return gestureDetector.onTouchEvent(event); } }; myWebView.setOnTouchListener(gestureListener); } class MyGestureDetector extends SimpleOnGestureListener { @Override public boolean onSingleTapConfirmed(MotionEvent e) { myWebView.reload(); Log.i("", "Reload"); return super.onSingleTapConfirmed(e); } } } 

EDITAR CÓDIGO JAVA: Second Way – He intentado esta cosa onTouchListener y que funciona bien para mí.

 public class MainActivity extends Activity { WebView myWebView; public static boolean flag = false; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); myWebView = new WebView(this); myWebView.getSettings().setJavaScriptEnabled(true); myWebView.loadUrl("file:///android_asset/chapters.html"); setContentView(myWebView); myWebView.setWebViewClient(new WebViewClient() { public void onPageFinished(WebView view, String url) { if (url.contains("#") && flag == false) { myWebView.loadUrl(url); flag = true; } else { flag = false; } } }); } } 

Para abrir la etiqueta de anclaje de otro archivo HTML de un archivo

  myWebView = new WebView(this); myWebView.getSettings().setJavaScriptEnabled(true); myWebView.loadUrl("file:///android_asset/1.htm"); myWebView.setWebViewClient(new WebViewClient() { @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { try{ chapter = url.substring(url.indexOf("#"),url.length()); url = url.substring(0,url.indexOf("#")); }catch (Exception e) { chapter = ""; } myWebView.loadUrl(url); return true; } public void onPageFinished(WebView view, String url) { if (!chapter.equalsIgnoreCase("") && flag == false) { myWebView.loadUrl(url+chapter); flag = true; } else { flag = false; } } }); setContentView(myWebView); 

Intente con este código. Funciona bien .

  String html = "<html><body><p><a href='#C4'>See also Chapter 4</a></p><p><h2>Chapter 1</h2><p>This chapter explains ba bla bla</p><h2>Chapter 2</h2><p>This chapter explains ba bla bla</p><h2>Chapter 3</h2><p>This chapter explains ba bla bla</p><h2><a name='C4'>Chapter 4</a></h2><p>This chapter explains ba bla bla</p><h2>Chapter 5</h2><p>This chapter explains ba bla bla</p><h2>Chapter 6</h2><p>This chapter explains ba bla bla</p><h2>Chapter 7</h2><p>This chapter explains ba bla bla</p><h2>Chapter 8</h2><p>This chapter explains ba bla bla</p><h2>Chapter 9</h2><p>This chapter explains ba bla bla</p></body></html>"; String mime = "text/html"; String encoding = "utf-8"; final WebView myWebView = (WebView)this.findViewById(R.id.webView); myWebView.getSettings().setJavaScriptEnabled(true); myWebView.loadDataWithBaseURL("app:html", html, mime, encoding, null); myWebView.setWebViewClient(new WebViewClient() { @Override public void onPageFinished(WebView view, String url) { super.onPageFinished(view, "app:html"); view.loadDataWithBaseURL("app:html", html, mime, encoding, null); } }); 

Este problema ocurre en los dispositivos Android 4.0.3 y 4.0.4: Si tiene una página web móvil (ya sea en activos o cargada desde la Web) cuyo contenido se rellena en todo el ancho de la pantalla, a continuación, algunos enlaces como este:

 <a href=... HTML links 

…¡no trabajará! Simplemente no podrán cargar la siguiente página! Es un poco extraño.

El error se documenta aquí: http://code.google.com/p/android/issues/detail?id=929

A pesar de que se registró en 2009, todavía sucede en los dispositivos Android 4.0.3 / 4.0.4.

La solución es no utilizar:

android:layout_height="wrap_content en el WebView.

Sustitúyalo por:

 android:layout_height="match_parent 

Pruebe este simple javascript de 2 líneas

 <html> <body> <head> <script language="javascript"> function jump_top() { location.href = "#top"; location.hash = ""; } </script> </head> <body> <a name="top"></a> <br /><br /><br /><br /> ... <br />Now you are at the bottom of the page <br /> <a onclick="jump_top()">To Top</a> </body> </html> 
  • Analizando HTML con Jsoup y eliminando spans con cierto estilo
  • Cómo construir un enlace de número de teléfono en Android que incluye una extensión
  • Android: ¿Es posible y cómo cambiar el tamaño de letra de una página HTML que se muestra en un WebView?
  • Inicie WhatsApp desde URL HREF con texto / contenido personalizado
  • CSS en línea para hr no se aplica mientras se convierte html a pdf utilizando la biblioteca iText
  • La casilla de verificación centrada en estilos no se puede comprobar cuando se utiliza TalkBack o VoiceOver
  • Entrada de archivo HTML en android webview (android 4.4, kitkat)
  • Android autofit mode causando problemas con el ancho css en la página web
  • Barra de herramientas pull-up utilizando sólo HTML y CSS en el navegador de Android
  • Extraer texto fuera de una etiqueta HTML
  • Abrir aplicación de Android desde una página web
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.