2016-07-28 40 views
0

我的RecyclerView中有一个WebView,每当我拨打RecyclerView.notifyDataSetChangedWebView都会有短暂的闪烁。RecyclelerView中的WebView将在notifyDataSetChanged时闪烁

我不想在WebView上发生任何变化,我该怎么做?

我知道我可以用notifyItemXXX而不是notifyDataSetChanged来解决这个问题。但我确实需要notifyDataSetChanged方法。

+0

你能跟踪webView索引并使用notifyItemRangeChanged吗? –

+0

@AlokOmkar我可以保留'WebView'的踪迹,但'notifyDataSetChanged'是刷新数据集最简单的方法。如果我使用'notifyItemRangeChanged',我需要在我的应用逻辑上做很多工作。 –

+0

为了防止闪烁的效果,看看这个SO答案:http://stackoverflow.com/a/32488059/2648035 - 让我知道它是否有帮助 –

回答

0

由于 notifyDataSetChanged()官方文档称“布局管理器将被迫完全重新绑定并重新布局所有可见视图。”。所以我认为webview的闪存是由此造成的。你可以找到这个“依赖onnotifyDataSetChanged()作为最后的手段”。 正如你所说,你必须使用这种方法,所以你可以请给更多的信息,所以我可以帮助你找到一个更好的解决方案。

+0

看来,如果我使用'notifyDataSetChanged','webView'必须闪烁。我需要'notifyDataSetChanged',因为这是刷新数据集最简单的方法。我的RecyclerView包含许多不同类型的条目,在服务器的响应之后,有些需要删除,有些需要添加,有些需要刷新,有些则什么也不做。真的很难使用'notifyItemXXX'。 –

+0

还有一个问题,我可以同时使用'notifyItemRangeRemoved'和'notifyItemRangeChanged'吗? –

+1

是的,您可以同时使用'notifyItemRangeRemoved'和'notifyItemRangeChanged',但要注意范围。正如'notifyItemRangeRemoved'所说的那样“之前位于positionStart + itemCount之后的项目现在可以在oldPosition - itemCount中找到。” – Beck