首先来看看对比ListView看一下RecyclerView的Adapter主要增加了哪些方法:

  • notifyItemChanged(int position) 更新列表position位置上的数据可以调用
  • notifyItemInserted(int position) 列表position位置添加一条数据时可以调用,伴有动画效果
  • notifyItemRemoved(int position) 列表position位置移除一条数据时调用,伴有动画效果
  • notifyItemMoved(int fromPosition, int toPosition) 列表fromPosition位置的数据移到toPosition位置时调用,伴有动画效果
  • notifyItemRangeChanged(int positionStart, int itemCount) 列表从positionStart位置到itemCount数量的列表项进行数据刷新
  • notifyItemRangeInserted(int positionStart, int itemCount) 列表从positionStart位置到itemCount数量的列表项批量添加数据时调用,伴有动画效果
  • notifyItemRangeRemoved(int positionStart, int itemCount) 列表从positionStart位置到itemCount数量的列表项批量删除数据时调用,伴有动画效果

问题:加载更多用notifyDataSetChanged()刷新图片闪烁

原因:notifyDataSetChanged()会导致整个itemview刷新,已经测试:相同position刷新其itemview是不同的对象,例如,刷新后,position为12的用了position为13的itemview,再次刷新时,又用了position为10的itemview,这样次position上对应的itemview的ImageView就会在重设size时发生闪烁,此现象是可以用肉眼看到的。

解决方法:

用notifyItemRangeInserted()进行增加数据使用的局部刷新,这样原先的itemview就不会重绘

或者用notifyItemRangeChanged() 进行单纯的局部刷新

注意:虽然方法是用来局部刷新的,但我们可以把局部刷新变成全部刷新,itemCount设成list.size()就可以实现不闪烁的全部刷新了,但最好加上这一句((SimpleItemAnimator)imagesListView.getItemAnimator()).setSupportsChangeAnimations(false);取消RecyclerView的动画效果,不然刷新的话的确不会快闪但会有个动画效果,体验也是不怎么好的。

我在项目中使用了:

  项目场景: 加载网络图片 进行点击刷新 调用时习惯性调用notifyDataSetChanged() 然后出现闪烁情况,图片越多闪烁越严重.

  改进方法:

  1.先调用((SimpleItemAnimator)imagesListView.getItemAnimator()).setSupportsChangeAnimations(false); //取消RecyclerView的动画效果

  2.刷新列表使用了mAdapter.notifyItemRangeChanged(0,imageList.size()); //进行列表全部刷新

  很完美的解决了。

参考:1.RecyclerView实现瀑布流遇到的各种问题(item移动,加载更多图片闪烁,以及定制各种类型Header和Footer)

   2.RecyclerView之更新UI数据的高级用法

RecyclerView加载更多用notifyDataSetChanged()刷新图片闪烁的更多相关文章

  1. 你必须了解的RecyclerView的五大开源项目-解决上拉加载、下拉刷新和添加Header、Footer等问题

    前段时间做项目由于采用的MD设计,所以必须要使用RecyclerView全面代替ListView.但是开发中遇到了需要实现RecyclerView上拉加载.下拉刷新和添加Header以及Footer等 ...

  2. ios UIWebView加载HTMLStr图文,关于图片宽高设置,webView内容实际高度的踩坑问题

    一.关于UIWebView 与 WKWebView 选取问题 从发布时间看: 2008年7月11日,在新一代iPhone3G正式发售当天,iPhone OS 2.0(iOS 2.0)推出,这时候就有U ...

  3. PullToRefreshListView上拉加载、下拉刷新

    说明:此项目使用studio完成的.需要导入library作为依赖,使用了xuitls获得网络请求.使用Pull解析了XML eclipse中的项目: //注意:此刷新功能是使用的第三方的PullTo ...

  4. mui的上拉加载更多 下拉刷新 自己封装的demo

    ----------------------------------------------- 这是一个非常呆萌的程序妹子,深夜码的丑代码------------------------------- ...

  5. 使用mescroll实现上拉加载与下拉刷新

    现在上拉加载与下拉刷新几乎已经是移动端必备功能之一了,自己实现一个太麻烦,但是好用的插件又非常少.之前看到网上很多人都在用iScroll,于是也尝试用它做了几个DEMO,但或多或少都有一些问题,比如这 ...

  6. 动态加载/删除css文件以及图片预加载

    动态加载/删除css文件以及图片预加载   功能模块页面   最近,工作中遇到了一个比较奇葩的需求:要在一个页面(PC端)增加一个功能模块,但是这个页面在不久之后要重构,为了新增加的模块可以继续复用, ...

  7. C#构造方法(函数) C#方法重载 C#字段和属性 MUI实现上拉加载和下拉刷新 SVN常用功能介绍(二) SVN常用功能介绍(一) ASP.NET常用内置对象之——Server sql server——子查询 C#接口 字符串的本质 AJAX原生JavaScript写法

    C#构造方法(函数)   一.概括 1.通常创建一个对象的方法如图: 通过  Student tom = new Student(); 创建tom对象,这种创建实例的形式被称为构造方法. 简述:用来初 ...

  8. 全网最easy的better-scroll实现上拉加载和下拉刷新

    前言 移动端页面常见的一种效果:下拉刷新(pulldownrefresh)和上拉加载(pullupload),目的都是为了增强用户的体验效果,因此各种移动端滑动插件也是层出不穷,今天小编也在这里给大家 ...

  9. 【微信小程序】scroll-view 的上拉加载和下拉刷新

    1.在微信小程序中,想到 下拉刷新 和 上拉加载,如果是整个页面都拖动的话,可以在页面配置中,配置 enablePullDownRefresh 和 onReachBottomDistance 然后在 ...

随机推荐

  1. SQL Server 获取日期是星期周几(默认从周日开始到周六 1-7)

    ALTER FUNCTION [dbo].[GetWeekDay] ( @Year INT, @Month INT ,@Day INT ) RETURNS INT AS BEGIN DECLARE @ ...

  2. Android学Jni/Ndk 开发记录(一)

      治疗拖延症的唯一办法就是:一想起些什么 / 要做些什么就 TM 立马去做! 是的,突然想起我不会 JNI.NDK 开发.解决办法:立马去学! 一:配置 NDK 环境 下载 NDK 写入到配置文件 ...

  3. 【Hadoop】MR 切片机制 & MR全流程

    1.概念 2.Split机制 3.MR Shuffle过程 4.MR中REDUCE与MAP写作过程 5.MR全貌

  4. div 事件透传

    有些时候,我们会想要把一个 div 层覆盖在另一个 div 层上,要让下层的 div 响应鼠标事件而上层的不响应仅仅只做内容展示. 这种时候,我们就可以用到一个 CSS 属性:pointer-even ...

  5. 转:android实时语音问题分析

    转:http://ticktick.blog.51cto.com/823160/1746136 PigeonCall:一款Android VoIP网络电话App架构分析 2016-02-29 20:1 ...

  6. MyEclipse导入Hibernate出现Path must include project and resource;/project name

    如图,在MyEclipse 2014以下版本中都没遇见这个问题. 在导入Hibernate框架的时候,可以说真的随缘,运气不好,明明配置全都没问题,还是连续几次失败,这个时候除了烧高香拜拜,也只能靠百 ...

  7. java.lang.NoSuchMethodError: ognl.SimpleNode.isEvalChain(Lognl/OgnlContext;)Z解决方法

    执行JavaEE项目时出现例如以下错误: java.lang.NoSuchMethodError: ognl.SimpleNode.isEvalChain(Lognl/OgnlContext;)Z a ...

  8. 【HTML5】元素<script>与<noscript>的使用

    功能描述 在新建的页面中增加一个文本框"txtContent"和一个按钮"请点击我":当单击按钮时.通过页面中加入的JavaScript脚本获取为文本框中的内容 ...

  9. maven生成jar包

    改了部分cas源码,想重新生成jar包,只好试着脱离eclipse,学了一下maven打jar包的命令,记录如下: 1.首先下载maven (请注意自己的jdk版本,如果使用maven2建议使用jdk ...

  10. LoadRunner变量到参数的互换

    作者QQ:764714258,转载请说明出处,阅读此文需要良好的C基础 LoadRunner中,web性能测试使用的脚步是C语言编写的.C语言中有变量的概念,LoadRunner工具中带有参数这个概念 ...