android - tutorial - son los elementos qué construyen un recyclerview
Webview dentro de RecyclerView muestra una pantalla en blanco algunas veces solo en dispositivos Nougat (2)
En mi dispositivo Nougat, la vista web dentro de RecyclerView está en blanco a veces. Cuando me desplazo lentamente y luego vuelvo al contenido del elemento de vista web, desaparecen. No hay problema en los dispositivos que se encuentran debajo de Android N. Android N usa Chrome como navegador predeterminado para las aplicaciones. Así que pensé que podría haber un error en Chrome, así que planteé un error en el portal de Chrome también. Hay un par de preguntas relacionadas en SO, pero eso no resolvió mi problema. Entonces, ¿hay alguna forma en la configuración de vista web de Android que pueda resolver este problema? He escrito una descripción detallada en el enlace del error.
Enlace de error: haga clic aquí
Mi código de método onBindViewHolder para WebView es
final VHItem vhItem = (VHItem) holder;
vhItem.webViewChild.getSettings().setUseWideViewPort(false);
vhItem.webViewChild.getSettings().setJavaScriptEnabled(true);
vhItem.webViewChild.loadData("<body>" + html + "</body>", "text/html;charset=utf-8", "utf-8");
dónde
html es la cadena html
Actualizar
Ellos han arreglado el problema. Si sigues teniendo el mismo problema, intenta actualizar tu versión de Android de Chrome a 61 o superior.
Para empezar, la vista web consume memoria porque carga tiene que cargar y representar datos html. En lugar de utilizar una vista web en una vista de reciclador, creo que sería mejor si la implementara de cualquiera de estas dos maneras:
- Usted maneja la lista de datos en html y la envía a la vista web y elimina completamente la vista del reciclador
- Dibuja el diseño de los contenidos esperados en xml e inflarlo directamente en la vista de reciclador y elimina la vista web completa. (Nota: puede inflar diferentes vistas en un reciclador dependiendo de la posición del adaptador y los datos en esa posición).
Usar una vista web puede parecer la manera fácil de implementar lo que sea que esté intentando, pero créame, los inconvenientes superan el beneficio. Así que es mejor evitarlo.
Este problema puede llegar por muchas razones posibles
- Cuando se desplaza muy rápido, Recyclerview se basa exclusivamente en inflar la vista un mínimo de veces y reutilizar las vistas existentes. Esto significa que mientras se desplaza cuando una vista (un elemento) sale de la pantalla, la misma vista se compra debajo simplemente cambiando sus contenidos. Cuando carga desde Internet, siempre es mejor descargar primero todos los datos y luego mostrarlos. Webview consume una gran cantidad de datos y está totalmente en contra del principio de diseño para tenerlos en una Recyclerview.
Para reparar esto, posiblemente podría agregar algún botón para volver a cargar datos o actualizar cada vez que visualice la vista.
- Nougat eliminó algunas funciones de la clase http urlconnection. No estoy seguro de esto. Pero en uno de los videos de desarrollador de Google, T había visto algo sobre la depreciación de algunas funciones y métodos
Espero que encuentres esto útil.