RecyclerView内部的Webview有时仅在Nougat设备上显示空白屏幕

在我的Nougat设备中,RecyclerView内的webview有时是空白的。 当我慢慢滚动然后回到webview项目内容消失。 Android N以下的设备没有问题.Android N使用Chrome作为应用的默认浏览器。 所以我认为Chrome中可能存在一个错误,所以我也在Chrome门户网站中提出了一个错误。 在SO中有几个相关的问题,但这并没有解决我的问题。 那么在Android webview设置中有哪种方法可以解决这个问题? 我在bug链接中写了详细说明。

错误链接: 点击这里

我的WebView的onBindViewHolder方法代码是

final VHItem vhItem = (VHItem) holder; vhItem.webViewChild.getSettings().setUseWideViewPort(false); vhItem.webViewChild.getSettings().setJavaScriptEnabled(true); vhItem.webViewChild.loadData("" + html + "", "text/html;charset=utf-8", "utf-8"); 

哪里

html是html字符串

更新

他们已经解决了这个问题。 如果您仍然遇到同样的问题,请尝试将Android Chrome版本更新为61或更高版本。

对于启动webview消耗内存,因为它必须加载并呈现html数据。 我认为如果您使用以下两种方式之一实现它会更好,而不是在回收站视图中使用webview:

  1. 您处理html中的数据列表并将其发送到webview并完全删除回收站视图
  2. 您在xml中绘制预期内容的布局并将其直接膨胀到recyclerview并删除完成的webview。 (注意:您可以根据适配器位置和该位置的数据将不同视图扩展到回收器中)。

使用webview似乎是实现你正在尝试的任何东西的简单方法,但相信我,这些缺点超过了好处。 所以最好避免它。

出于许多可能的原因可能会出现此问题

  • 滚动速度非常快时,Recyclerview完全基于将视图放大到最小时间并重用现有视图。 这意味着当您在视图(一个项目)退出屏幕时滚动时,只需更改其内容即可在下面购买相同的视图。当您从Internet加载时,最好首先下载所有数据然后再显示它。 Webview消耗大量数据,完全违反设计原则,将它们放入Recyclerview中。

要修复此问题,您可以添加一些按钮来重新加载数据或每次显示视图时刷新。

  • Nougat从http urlconnection类中删除了一些函数我不确定这个。 但在谷歌开发者video中,T看到了一些关于某些function和方法的折旧的问题

希望你觉得这很有帮助。

我通过在RecyclerView的上层浮动WebView,同时在RecyclerView中放置一个HOLDER视图来解决这个问题。 然后我在RecyclerView的scroll事件中注册一个监听器。 我控制浮动WebView的位置和可见性