腾讯老司机的RecyclerView局部刷新爬坑之路
作者:Hoolly,腾讯移动客户端开发工程师。 商业转载请联系腾讯WeTest获得授权,非商业转载请注明出处
优化之前的效果:
优化之后的效果:
可以看到,优化之后,列表中的这张大图不在有一闪一闪亮晶晶的效果了!
分析为什么会闪一下
对分析的可能造成闪动的问题进行解决
验证是否解决
我们的需求是大家已经看到了,点击打分,弹出一个对话框,点击一个分数,这时候,通过一些列复杂的转换(当然不是本文的论述的重点),这时候到了要更新列表项了,如是很自然,我们会这么做:
流传甚为广泛的一种说法,imageView的宽高不固定导致的(wrap_content)?
这个是RecyclerView自带的更新动画效果导致的?
这个是因为图片加载框架(glide 的 animte)的动画效果导致的?
getView中(RecyclerView中是onBindViewHolder)加载图片的时候,设置一个tag,当发现这个imageView的tag和之前的tag一致时就不加载
1、对于第一种,我的做法是自己写了一个自定义的imageView,重写omMeasure方法,如下:
因为我们的这个列表项中的图片是(高=宽)的,因此,我才这么写,这样写也有一个好处,不用在onBindViewHolder中去动态的计算出高度,然后在已layoutParm的方式设置给imageView,相信不少小伙伴都做过了吧!
然而,遗憾的是,他并没有解决闪一下的问题!此时这个闪动的原因显然不在这里,但是这里做的,可以保留下来。
的做法:
以及也尝试了这种
然而,那种渐变的闪动消失了,但是,取而代之的是一种更加不可接受的闪动,这里就不用gif展示了,因此原因也并不在此处。
3、对于对三种说法,我也去尝试了一下将glide加载改为:
然而得到的依然是一个失望的结果,依然没有解决闪动的问题,原因也不在此处。
4、那么,就剩下最后一个猜测了,那么会不会是它呢?那就试试吧,于是代码改为:
好吧,此时已经有点崩溃了,显然这个也不是我要的结果,那么此时是否应该在静下来想一想,自己对于可能的几种原因做过的一些对策,是否有哪里遗漏了。经过思考,发现并没有!!那么一定是还有其他的原因,没有考虑到!
还是去翻一翻RecyclerView的api吧,我注意到了这个api:
可以看到这里有一个payload的参数,use null to identify a “full” update这是说如果传null就是全部更新,回过头去看一看我们之前的调用方式:
看一下源码,发现
实际上,payload这个参数就是传的null,那也就是说如果传一个不为null的参数,就可以对列表项中的具体控件更新了?
http://stackoverflow.com/questions/33176336/need-an-example-about-recyclerview-adapter-notifyitemchangedint-position-objec
我了解到这个方法的使用方式是这样的:
然来,onBindViewHolder有这么一个重载方式,如是我也这么做了,在下面这个重载中,去更新我想更新的控件:
然后,更新的方式变成了这种:
是骡子是马,那就在遛一遛吧!
http://stackoverflow.com/questions/32463136/recyclerview-adapter-notifyitemchanged-never-passes-payload-to-onbindviewholde
需要重写这个动画,让永远返回true,已达到newHolder和olderHolder是同一个,然而,这真的就是我的救命稻草吗?
那么,到底,到底问题出在何处?会不会是XrecyclerView的问题?根据调用栈,我看到第一个onBindViewHolder被执行了,往上面跟,发现XrecyclerView的实现果然存在问题!
如图,作者仅仅只实现了,不带payload的方法,最后adapter调用的只有不带paylaod的方法!所以,重写一个吧!
总结
实际上RecyclerView做局部刷新是非常容易的,其实就是使用好带payload参数的这个notifyItemRangeChanged方法,以及override带payload的这个onBindViewHolder方法,在onBindViewHolder中去刷新你想更新的控件即可,并非是网上传闻的那些原因,当然此处爬坑时间之长,也可能更选用开源控件不当有关,所以,选择开源控件,要谨慎再谨慎!
作者:Hoolly,腾讯移动客户端开发工程师。 商业转载请联系腾讯WeTest获得授权,非商业转载请注明出处
优化之前的效果:
优化之后的效果:
可以看到,优化之后,列表中的这张大图不在有一闪一闪亮晶晶的效果了!
分析为什么会闪一下
对分析的可能造成闪动的问题进行解决
验证是否解决
我们的需求是大家已经看到了,点击打分,弹出一个对话框,点击一个分数,这时候,通过一些列复杂的转换(当然不是本文的论述的重点),这时候到了要更新列表项了,如是很自然,我们会这么做:
流传甚为广泛的一种说法,imageView的宽高不固定导致的(wrap_content)?
这个是RecyclerView自带的更新动画效果导致的?
这个是因为图片加载框架(glide 的 animte)的动画效果导致的?
getView中(RecyclerView中是onBindViewHolder)加载图片的时候,设置一个tag,当发现这个imageView的tag和之前的tag一致时就不加载
1、对于第一种,我的做法是自己写了一个自定义的imageView,重写omMeasure方法,如下:
因为我们的这个列表项中的图片是(高=宽)的,因此,我才这么写,这样写也有一个好处,不用在onBindViewHolder中去动态的计算出高度,然后在已layoutParm的方式设置给imageView,相信不少小伙伴都做过了吧!
然而,遗憾的是,他并没有解决闪一下的问题!此时这个闪动的原因显然不在这里,但是这里做的,可以保留下来。
的做法:
以及也尝试了这种
然而,那种渐变的闪动消失了,但是,取而代之的是一种更加不可接受的闪动,这里就不用gif展示了,因此原因也并不在此处。
3、对于对三种说法,我也去尝试了一下将glide加载改为:
然而得到的依然是一个失望的结果,依然没有解决闪动的问题,原因也不在此处。
4、那么,就剩下最后一个猜测了,那么会不会是它呢?那就试试吧,于是代码改为:
好吧,此时已经有点崩溃了,显然这个也不是我要的结果,那么此时是否应该在静下来想一想,自己对于可能的几种原因做过的一些对策,是否有哪里遗漏了。经过思考,发现并没有!!那么一定是还有其他的原因,没有考虑到!
还是去翻一翻RecyclerView的api吧,我注意到了这个api:
可以看到这里有一个payload的参数,use null to identify a “full” update这是说如果传null就是全部更新,回过头去看一看我们之前的调用方式:
看一下源码,发现
实际上,payload这个参数就是传的null,那也就是说如果传一个不为null的参数,就可以对列表项中的具体控件更新了?
http://stackoverflow.com/questions/33176336/need-an-example-about-recyclerview-adapter-notifyitemchangedint-position-objec
我了解到这个方法的使用方式是这样的:
然来,onBindViewHolder有这么一个重载方式,如是我也这么做了,在下面这个重载中,去更新我想更新的控件:
然后,更新的方式变成了这种:
是骡子是马,那就在遛一遛吧!
http://stackoverflow.com/questions/32463136/recyclerview-adapter-notifyitemchanged-never-passes-payload-to-onbindviewholde
需要重写这个动画,让永远返回true,已达到newHolder和olderHolder是同一个,然而,这真的就是我的救命稻草吗?
那么,到底,到底问题出在何处?会不会是XrecyclerView的问题?根据调用栈,我看到第一个onBindViewHolder被执行了,往上面跟,发现XrecyclerView的实现果然存在问题!
如图,作者仅仅只实现了,不带payload的方法,最后adapter调用的只有不带paylaod的方法!所以,重写一个吧!
总结
实际上RecyclerView做局部刷新是非常容易的,其实就是使用好带payload参数的这个notifyItemRangeChanged方法,以及override带payload的这个onBindViewHolder方法,在onBindViewHolder中去刷新你想更新的控件即可,并非是网上传闻的那些原因,当然此处爬坑时间之长,也可能更选用开源控件不当有关,所以,选择开源控件,要谨慎再谨慎!
$(".MathJax").remove();
</div>
<ul class="article_collect clearfix csdn-tracking-statistics tracking-click" data-mod="popu_378" style="display: none;">
<li class="tit">本文已收录于以下专栏:</li>
![](https://avatar.csdn.net/D/C/4/3_sq365.jpg)
<form action="https://blog.csdn.net/lf0814/phoenix/comment/submit?id=52884569" method="post" onsubmit="return subform(this);" id="commentform">
<textarea class="comment_content" name="comment_content" id="comment_content" placeholder="写下你的评论…" style="height: 28px;"></textarea>
<div class="bot_bar clearfix" style="opacity: 0;">
<div id="ubbtools" class="add_code">
<a href="#insertcode" code="code" target="_self"><i class="icon iconfont icon-daima"></i></a>
</div>
<input type="hidden" id="comment_replyId" name="comment_replyId">
<input type="hidden" id="comment_userId" name="comment_userId" value="">
<input type="hidden" id="commentId" name="commentId" value="">
<input type="submit" class="btn btn-redborder" value="发表评论">
<span id="tip_comment" class="tip">
<div style="display: none;" class="csdn-tracking-statistics tracking-click" data-mod="popu_384"><a href="#" target="_blank" class="comment_area_btn">发表评论</a></div>
<div id="lang_list" code="code">
<a href="#html" style="width:95px;" class="long_name" target="_self">HTML/XML</a>
<a href="#objc" style="width:95px;" class="long_name" target="_self">objective-c</a>
<a href="#delphi" style="width:58px;" class="zhong_name" target="_self">Delphi</a>
<a href="#ruby" class="zhong_name" target="_self">Ruby</a>
<a href="#php" target="_self">PHP</a>
<a href="#csharp" class="duan_name" target="_self">C#</a>
<a style=" border-right: none;" href="#cpp" class="duan_name" target="_self">C++</a>
<a style=" border-bottom:none;width:95px;" href="#javascript" class="long_name" target="_self">JavaScript</a>
<a style=" border-bottom:none;width:95px;" href="#vb" class="long_name" target="_self">Visual Basic</a>
<a style=" border-bottom:none;" href="#python" class="zhong_name" target="_self">Python</a>
<a style=" border-bottom:none;" href="#java" class="zhong_name" target="_self">Java</a>
<a style="border-bottom:none;" href="#css" class="duan_name" target="_self">CSS</a>
<a style="border-bottom:none;" href="#sql" class="duan_name" target="_self">SQL</a>
<a style="border:none; " href="#plain" class="duan_name" target="_self">其它</a>
<span class="arrb"></span>
</div>
</span></div>
</form>
</div>
</div>
</div>
</div>
<div class="comment_li_outbox">
<div id="comment_list"> <div class="comment_li_box clearfix"> <dl class="comment_list clearfix" id="comment_item_7347165"> <dt> <a href="/yx284853845love"><img src="https://avatar.csdn.net/A/9/6/3_yx284853845love.jpg" alt="yx284853845love"></a></dt> <dd> <ul class="com_r clearfix"> <li class="top bot clearfix"> <h4><a href="/yx284853845love">yx284853845love</a></h4> <span class="time">2017-11-17 09:21</span> <span class="floor_num" floor="1">#1楼</span> <div> <a href="#reply" class="com_reply btn btn-noborder reply_btn" title="回复" commentid="7347165" floor="1">回复</a> </div> </li> <li class="mid clearfix"> <div class="comment_p">源码在哪。。。</div> </li> <li class="bot clearfix"> </li> </ul> </dd> </dl><div class="child_comment" data-listshow="false"> <div class="autoHeight clearfix"> </div></div> </div><div class="clear"></div></div>
</div>
<div class="more_comment" style="display: block;">
<div id="comment_bar" class="trackgin-ad" data-mod="popu_385" style="display: none;"><a id="load_comments" class="btn btn-large more_comment_btn" page="2">查看 <span>1</span> 条热评<i class="icon iconfont icon-xiajiantou"></i></a></div>
</div>
<!-- <h3 class="recommend_tit" id="related">相关文章推荐</h3> -->
<div class="recommend_list clearfix" id="rasss">
<dl class="clearfix csdn-tracking-statistics recommend_article recommend_article_out" data-mod="popu_387" data-poputype="feed" data-feed-show="false" data-dsm="post">
<a href="https://blog.csdn.net/jdsjlzx/article/details/52893469" target="_blank" strategy="BlogCommendFromBaidu_0">
<dd>
<h2 style="margin-bottom: 0px;">再说Android RecyclerView局部刷新那个坑</h2>
<ul class="floatR">
<li class="avatar_img"><img src="https://avatar.csdn.net/2/9/C/3_jdsjlzx.jpg" alt="jdsjlzx" title="jdsjlzx"></li>
<li class="user_name">jdsjlzx</li>
<li class="time">2016年10月22日 17:06</li>
<li class="visited_num"><i class="icon iconfont icon-read"></i><span>28866</span></li>
</ul><div class="summary">
关键:public final void notifyItemChanged(int position, Object payload)RecyclerView局部刷新大家都遇到过,有时候还说会遇见图... </div>
</dd>
</a>
</dl>
<dl class="clearfix csdn-tracking-statistics recommend_article recommend_article_out" data-mod="popu_387" data-poputype="feed" data-feed-show="false" data-dsm="post">
<a href="https://blog.csdn.net/gan303/article/details/52055284" target="_blank" strategy="BlogCommendFromBaidu_1">
<dd>
<h2 style="margin-bottom: 0px;">android recycleView局部刷新的选择</h2>
<ul class="floatR">
<li class="avatar_img"><img src="https://avatar.csdn.net/1/B/6/3_gan303.jpg" alt="gan303" title="gan303"></li>
<li class="user_name">gan303</li>
<li class="time">2016年07月28日 14:58</li>
<li class="visited_num"><i class="icon iconfont icon-read"></i><span>5810</span></li>
</ul><div class="summary">
android中recycleview的运用随着android系统的更新以及手机硬件的更新迭代,已经越来越广泛。
而其中的局部刷新便是许多需求都要求实现的基础功能。
那么对于如何局部刷新而言。方式一般…
</dd>
</a>
</dl>
<dl class="">
<script>
(function() {
var s = "_" + Math.random().toString(36).slice(2);
document.write('<div id="' + s + '"></div>');
(window.slotbydup=window.slotbydup || []).push({
id: '4765209',
container: s,
size: '808,120',
display: 'inlay-fix'
});
})();
</script><div id="_q5r2yp3kvmc"></div>
</dl>
<dl class="clearfix csdn-tracking-statistics recommend_article recommend_article_out" data-mod="popu_387" data-poputype="feed" data-feed-show="false" data-dsm="post">
<a href="https://blog.csdn.net/u012790961/article/details/49804805" target="_blank" strategy="BlogCommendFromBaidu_2">
<dd>
<h2 style="margin-bottom: 0px;">RecyclerView的局部刷新</h2>
<ul class="floatR">
<li class="avatar_img"><img src="https://avatar.csdn.net/B/4/A/3_u012790961.jpg" alt="u012790961" title="u012790961"></li>
<li class="user_name">u012790961</li>
<li class="time">2015年11月12日 21:15</li>
<li class="visited_num"><i class="icon iconfont icon-read"></i><span>9258</span></li>
</ul><div class="summary">
一直纠结于RecyclerView的局部刷新,终于解决了.
因为要实现的效果要不断地去刷新item中的某些控件数据
所以使用notifydatachangedset(),notifyitemdat…
</dd>
</a>
</dl>
<dl class="clearfix csdn-tracking-statistics recommend_article recommend_article_out" data-mod="popu_387" data-poputype="feed" data-feed-show="false" data-dsm="post">
<a href="https://blog.csdn.net/qq541976141/article/details/51485732" target="_blank" strategy="BlogCommendFromBaidu_3">
<dd>
<h2 style="margin-bottom: 0px;">Recylerview局部刷新</h2>
<ul class="floatR">
<li class="avatar_img"><img src="https://avatar.csdn.net/A/4/A/3_qq541976141.jpg" alt="qq541976141" title="qq541976141"></li>
<li class="user_name">qq541976141</li>
<li class="time">2016年05月23日 23:29</li>
<li class="visited_num"><i class="icon iconfont icon-read"></i><span>633</span></li>
</ul><div class="summary">
Recylerview局部刷新 </div>
</dd>
</a>
</dl>
<dl class="clearfix csdn-tracking-statistics recommend_article recommend_article_out" data-mod="popu_387" data-poputype="feed" data-feed-show="false" data-dsm="post">
<a href="https://blog.csdn.net/wjt_developer/article/details/53366900" target="_blank" strategy="BlogCommendFromBaidu_4">
<dd>
<h2 style="margin-bottom: 0px;">RecycleView局部刷新</h2>
<ul class="floatR">
<li class="avatar_img"><img src="https://avatar.csdn.net/3/0/0/3_wjt_developer.jpg" alt="wjt_developer" title="wjt_developer"></li>
<li class="user_name">wjt_developer</li>
<li class="time">2016年11月27日 21:17</li>
<li class="visited_num"><i class="icon iconfont icon-read"></i><span>213</span></li>
</ul><div class="summary">
有时候我们需要用RecycleView来展示网络数据,如果做了加载更多功能,那么我们调用传统的notifyDataSetChanged方法,必然会刷新全部的Item,既耗内存,又耗流量(假如没有缓存)... </div>
</dd>
</a>
</dl><dl id="_1diimddz5wf"></dl>
<dl class="clearfix csdn-tracking-statistics recommend_article recommend_article_out" data-mod="popu_387" data-poputype="feed" data-feed-show="false" data-dsm="post">
<a href="https://blog.csdn.net/Captive_Rainbow_/article/details/71438872" target="_blank" strategy="BlogCommendFromBaidu_5">
<dd>
<h2 style="margin-bottom: 0px;">RecyclerView局部刷新的应用场景简单分析</h2>
<ul class="floatR">
<li class="avatar_img"><img src="https://avatar.csdn.net/7/1/A/3_captive_rainbow_.jpg" alt="Captive_Rainbow_" title="Captive_Rainbow_"></li>
<li class="user_name">Captive_Rainbow_</li>
<li class="time">2017年05月09日 09:08</li>
<li class="visited_num"><i class="icon iconfont icon-read"></i><span>946</span></li>
</ul><div class="summary">
RecyclerView 局部刷新的应用场景巩固今天在做通讯录屏蔽时,由于通讯录列表里有两种不同的效果展示:1. 已经屏蔽的 item ,显示一个按钮“解除屏蔽”
2. 未屏蔽的 item ,显示两个…
</dd>
</a>
</dl>
<dl class="clearfix csdn-tracking-statistics recommend_article recommend_article_out" data-mod="popu_387" data-poputype="feed" data-feed-show="false" data-dsm="post">
<a href="https://blog.csdn.net/qq15357971925/article/details/78043332" target="_blank" strategy="BlogCommendFromBaidu_6">
<dd>
<h2 style="margin-bottom: 0px;">android RecyclerView局部刷新</h2>
<ul class="floatR">
<li class="avatar_img"><img src="https://avatar.csdn.net/8/1/8/3_qq15357971925.jpg" alt="qq15357971925" title="qq15357971925"></li>
<li class="user_name">qq15357971925</li>
<li class="time">2017年09月20日 17:29</li>
<li class="visited_num"><i class="icon iconfont icon-read"></i><span>1850</span></li>
</ul><div class="summary">
项目中列表需要有点赞的功能,这时我们想到RecyclerView比listview的好处就是,recyclerview有单条item刷新的方法,于是就调用了RecyclerView的notifyIte... </div>
</dd>
</a>
</dl>
<dl class="clearfix csdn-tracking-statistics recommend_article recommend_article_out" data-mod="popu_387" data-poputype="feed" data-feed-show="false" data-dsm="post">
<a href="https://blog.csdn.net/jdsjlzx/article/details/50445424" target="_blank" strategy="BlogCommendFromBaidu_7">
<dd>
<h2 style="margin-bottom: 0px;">Android RecyclerView更新某条/一条数据</h2>
<ul class="floatR">
<li class="avatar_img"><img src="https://avatar.csdn.net/2/9/C/3_jdsjlzx.jpg" alt="jdsjlzx" title="jdsjlzx"></li>
<li class="user_name">jdsjlzx</li>
<li class="time">2016年01月01日 17:30</li>
<li class="visited_num"><i class="icon iconfont icon-read"></i><span>12018</span></li>
</ul><div class="summary">
注意:使用notifyItemRemoved(position)更新数据之前,还必须集合中删除该数据:mDatas.remove(position),否则不更新。
更新数据
这里更新数据集不…
</dd>
</a>
</dl>
<dl class="clearfix csdn-tracking-statistics recommend_article recommend_article_out" data-mod="popu_387" data-poputype="feed" data-feed-show="false" data-dsm="post">
<a href="https://blog.csdn.net/professionIT/article/details/52886249" target="_blank" strategy="BlogCommendFromBaidu_8">
<dd>
<h2 style="margin-bottom: 0px;">RecyclerView局部刷新的坑</h2>
<ul class="floatR">
<li class="avatar_img"><img src="https://avatar.csdn.net/6/2/F/3_professionit.jpg" alt="professionIT" title="professionIT"></li>
<li class="user_name">professionIT</li>
<li class="time">2016年10月21日 18:51</li>
<li class="visited_num"><i class="icon iconfont icon-read"></i><span>10070</span></li>
</ul><div class="summary">
话说有图有真相,首先来对比一下局部刷新前后的效果:
优化之前的效果:
优化之后的效果:
可以看到,优化之后,列表中的这张大图不在有一闪一闪亮晶晶的效果了!
那么,这是如何做到的呢?这是本…
</dd>
</a>
</dl>
<dl class="clearfix csdn-tracking-statistics recommend_article recommend_article_out" data-mod="popu_387" data-poputype="feed" data-feed-show="false" data-dsm="post">
<a href="https://blog.csdn.net/u014583590/article/details/52135085" target="_blank" strategy="BlogCommendFromBaidu_9">
<dd>
<h2>ListView/RecyclerView的item中有进度条的处理</h2>
<div class="summary">
之所以特意提出是有进度条的情况,是因为进度条刷新的频率非常高,如果是在进度刷新的时候调用notifyDataSetChanged或者notifyItemChanged方法虽然可以实现刷新,但是界面会频... </div>
<ul>
<li class="avatar_img"><img src="https://avatar.csdn.net/E/3/9/3_u014583590.jpg" alt="u014583590" title="u014583590"></li>
<li class="user_name">u014583590</li>
<li class="time">2016年08月06日 11:10</li>
<li class="visited_num"><i class="icon iconfont icon-read"></i><span>3435</span></li>
</ul>
</dd>
</a>
</dl><dl id="yd_a_d_feed_11" class="yd_a_d_feed_cla" style="height:124px;overflow: hidden;"><div></div></dl>
<dl class="clearfix csdn-tracking-statistics recommend_article recommend_article_out" data-mod="popu_387" data-poputype="feed" data-feed-show="false" data-dsm="post">
<a href="https://blog.csdn.net/cumtsx/article/details/51834797" target="_blank" strategy="BlogCommendFromBaidu_10">
<dd>
<h2>Recyclerview刷新延迟的问题(刷新两次才更新数据)</h2>
<div class="summary">
最近闲来开发一个自己游戏公会的小应用,成员介绍模块的实现用到了Recyclerview,从后台获取成员的详细信息然后Recyclerview展示。实现下拉刷新数据时,遇到了一个问题:后台数据更新后,下... </div>
<ul>
<li class="avatar_img"><img src="https://avatar.csdn.net/7/A/7/3_cumtsx.jpg" alt="cumtsx" title="cumtsx"></li>
<li class="user_name">cumtsx</li>
<li class="time">2016年07月05日 21:31</li>
<li class="visited_num"><i class="icon iconfont icon-read"></i><span>3463</span></li>
</ul>
</dd>
</a>
</dl>
<dl class="clearfix csdn-tracking-statistics recommend_article recommend_article_out" data-mod="popu_387" data-poputype="feed" data-feed-show="false" data-dsm="post">
<a href="https://blog.csdn.net/hello_1s/article/details/54136264" target="_blank" strategy="BlogCommendFromBaidu_11">
<dd>
<h2>RecyclerView使用、上拉加载、局部刷新、多种布局、点击事件和坑</h2>
<div class="summary">
一、Recycler的基础使用先来了解一下它是干啥的:
可以实现ListView的效果
可以实现GridView的效果
可以实现瀑布流的效果
主要是通过设置它的setLayoutManager来决…
<ul>
<li class="avatar_img"><img src="https://avatar.csdn.net/7/6/9/3_hello_1s.jpg" alt="hello_1s" title="hello_1s"></li>
<li class="user_name">hello_1s</li>
<li class="time">2017年01月06日 12:25</li>
<li class="visited_num"><i class="icon iconfont icon-read"></i><span>2981</span></li>
</ul>
</dd>
</a>
</dl>
<dl class="clearfix csdn-tracking-statistics recommend_article recommend_article_out" data-mod="popu_387" data-poputype="feed" data-feed-show="false" data-dsm="post">
<a href="https://blog.csdn.net/CSDN_LQR/article/details/54023261" target="_blank" strategy="BlogCommendFromBaidu_12">
<dd>
<h2 style="margin-bottom: 0px;">解决RecyclerView局部刷新时闪烁</h2>
<ul class="floatR">
<li class="avatar_img"><img src="https://avatar.csdn.net/6/6/F/3_csdn_lqr.jpg" alt="CSDN_LQR" title="CSDN_LQR"></li>
<li class="user_name">CSDN_LQR</li>
<li class="time">2017年01月04日 19:42</li>
<li class="visited_num"><i class="icon iconfont icon-read"></i><span>4149</span></li>
</ul><div class="summary">
RecyclerView局部刷新是由于其自带的item动画造成的,相信都看过RecyclerView在移除某个item时的删除动画吧,这个闪烁也是默认动画中的效果,所以只要去掉默认动画里的闪烁效果问题... </div>
</dd>
</a>
</dl>
<dl class="clearfix csdn-tracking-statistics recommend_article recommend_article_out" data-mod="popu_387" data-poputype="feed" data-feed-show="false" data-dsm="post">
<a href="https://blog.csdn.net/lzq520210/article/details/69253884" target="_blank" strategy="BlogCommendFromBaidu_13">
<dd>
<h2 style="margin-bottom: 0px;">RecyclerView列表数据刷新</h2>
<ul class="floatR">
<li class="avatar_img"><img src="https://avatar.csdn.net/5/A/D/3_lzq520210.jpg" alt="lzq520210" title="lzq520210"></li>
<li class="user_name">lzq520210</li>
<li class="time">2017年04月05日 14:38</li>
<li class="visited_num"><i class="icon iconfont icon-read"></i><span>474</span></li>
</ul><div class="summary">
需求是这样的,一个RecyclerView列表数据,每一个item都有点赞功能,点击item进入详情页,详情页也可以点赞,在详情页点赞后,返回列表,要求刷新数据,是刷新某一个item的数据,不是所有的... </div>
</dd>
</a>
</dl>
<dl class="clearfix csdn-tracking-statistics recommend_article recommend_article_out" data-mod="popu_387" data-poputype="feed" data-feed-show="false" data-dsm="post">
<a href="https://blog.csdn.net/sunyuntai/article/details/53954474" target="_blank" strategy="BlogCommendFromBaidu_14">
<dd>
<h2 style="margin-bottom: 0px;">关于RecyclerView刷新</h2>
<ul class="floatR">
<li class="avatar_img"><img src="https://avatar.csdn.net/4/3/C/3_sunyuntai.jpg" alt="sunyuntai" title="sunyuntai"></li>
<li class="user_name">sunyuntai</li>
<li class="time">2016年12月31日 11:40</li>
<li class="visited_num"><i class="icon iconfont icon-read"></i><span>643</span></li>
</ul><div class="summary">
用SwipeRefreshLayout嵌套Recycler
下面是布局文件
android:id=”@+id/swipeRefreshLayout”
androi…
</dd>
</a>
</dl>
<dl id="_euoimy82ok"></dl><dl class="clearfix csdn-tracking-statistics recommend_article recommend_article_out" data-mod="popu_387" data-poputype="feed" data-feed-show="false" data-dsm="post">
<a href="https://blog.csdn.net/zhangli_/article/details/70154476" target="_blank" strategy="BlogCommendFromBaidu_15">
<dd>
<h2>添加或删除RecyclerView的item后 刷新Adapter中的数据源的个数</h2>
<div class="summary">
通常Recycler给Adapter赋上数据源的时候利用:adapter.notifyDataSetChanged();这样一般是在初始化界面 从网络获取到数据后 直接赋给adapter的写法。然后再... </div>
<ul>
<li class="avatar_img"><img src="https://avatar.csdn.net/F/E/F/3_zhangli_.jpg" alt="zhangli_" title="zhangli_"></li>
<li class="user_name">zhangli_</li>
<li class="time">2017年04月13日 10:12</li>
<li class="visited_num"><i class="icon iconfont icon-read"></i><span>2773</span></li>
</ul>
</dd>
</a>
</dl>
<dl class="clearfix csdn-tracking-statistics recommend_article recommend_article_out" data-mod="popu_387" data-poputype="feed" data-feed-show="false" data-dsm="post">
<a href="https://blog.csdn.net/b14858856/article/details/52920164" target="_blank" strategy="BlogCommendFromBaidu_16">
<dd>
<h2>Recyclerview使用notifyitemchanged方法会回到顶部</h2>
<div class="summary">
categories.get(lastPosition).setSelected(false);
categoryAdapter.notifyItemChanged(lastPosition);
ca…
<ul>
<li class="avatar_img"><img src="https://avatar.csdn.net/8/4/2/3_b14858856.jpg" alt="b14858856" title="b14858856"></li>
<li class="user_name">b14858856</li>
<li class="time">2016年10月25日 11:28</li>
<li class="visited_num"><i class="icon iconfont icon-read"></i><span>3974</span></li>
</ul>
</dd>
</a>
</dl>
<dl class="clearfix csdn-tracking-statistics recommend_article recommend_article_out" data-mod="popu_387" data-poputype="feed" data-feed-show="false" data-dsm="post">
<a href="https://blog.csdn.net/jimdaxu/article/details/79582833" target="_blank" strategy="BlogCommendFromBaidu_17">
<dd>
<h2 style="margin-bottom: 0px;">RecyclerView局部更新</h2>
<ul class="floatR">
<li class="avatar_img"><img src="https://avatar.csdn.net/7/8/6/3_jimdaxu.jpg" alt="jimdaxu" title="jimdaxu"></li>
<li class="user_name">jimdaxu</li>
<li class="time">2018年03月16日 15:58</li>
<li class="visited_num"><i class="icon iconfont icon-read"></i><span>24</span></li>
</ul><div class="summary">
局部更新两个步骤:1 mAdapter.notifyItemChanged(position);2 重写adapter中的onBindViewHolder(RecyclerView.ViewHolde... </div>
</dd>
</a>
</dl>
<dl class="clearfix csdn-tracking-statistics recommend_article recommend_article_out" data-mod="popu_387" data-poputype="feed" data-feed-show="false" data-dsm="post">
<a href="https://blog.csdn.net/bskfnvjtlyzmv867/article/details/71106123" target="_blank" strategy="BlogCommendFromBaidu_18">
<dd>
<h2>Android框架之路——Glide加载图片(结合RecyclerView、CardView)</h2>
<div class="summary">
Android框架之路——Glide加载图片(结合RecyclerView、CardView)一、简介:
在泰国举行的谷歌开发者论坛上,谷歌为我们介绍了一个名叫 Glide 的图片加载库,作者是b…
<ul>
<li class="avatar_img"><img src="https://avatar.csdn.net/A/2/2/3_bskfnvjtlyzmv867.jpg" alt="bskfnvjtlyzmv867" title="bskfnvjtlyzmv867"></li>
<li class="user_name">bskfnvjtlyzmv867</li>
<li class="time">2017年05月03日 01:42</li>
<li class="visited_num"><i class="icon iconfont icon-read"></i><span>4258</span></li>
</ul>
</dd>
</a>
</dl>
<dl class="clearfix csdn-tracking-statistics recommend_article recommend_article_out" data-mod="popu_387" data-poputype="feed" data-feed-show="false" data-dsm="post">
<a href="https://blog.csdn.net/qq_22770457/article/details/54095337" target="_blank" strategy="BlogCommendFromBaidu_19">
<dd>
<h2>Android——实现酷炫的RecyclerView心形交错下拉刷新动画</h2>
<div class="summary">
最近好久没发博客了啊...虽然工作比较忙,但还是懈怠了。
本文介绍实现的一个带动效的RecyclerView下拉刷新动画,效果如下图:
实现原理:
基于Aspsine的上拉加载下拉刷新的Rec…
<ul>
<li class="avatar_img"><img src="https://avatar.csdn.net/9/C/1/3_qq_22770457.jpg" alt="qq_22770457" title="qq_22770457"></li>
<li class="user_name">qq_22770457</li>
<li class="time">2017年01月08日 16:31</li>
<li class="visited_num"><i class="icon iconfont icon-read"></i><span>2495</span></li>
</ul>
</dd>
</a>
</dl>
</div>
</div>
<img class="append_mark_img" style="display:block;position:absolute;left:0;bottom:0;width:30px;height:16px" src="https://img-blog.csdnimg.cn/2022010622215378992.png"></div>
<div class="writings">
<div class="public_signal clearfix">
<h3>博主最新文章</h3>
<a href="https://blog.csdn.net/lf0814" target="_blank" class="more"><span>更多文章</span></a>
</div>
<ul class="inf_list clearfix csdn-tracking-statistics tracking-click" data-mod="popu_382">
<li class="clearfix">
<a href="https://blog.csdn.net/lf0814/article/details/79217937" target="_blank">蓝牙(Bluetooth)设备通讯,并连接WIFI</a>
</li>
<li class="clearfix">
<a href="https://blog.csdn.net/lf0814/article/details/78951843" target="_blank">AndroidStudio3.0 Error:All flavors must now belong to a named flavor dimension</a>
</li>
<li class="clearfix">
<a href="https://blog.csdn.net/lf0814/article/details/78812655" target="_blank">Android 日历归档</a>
</li>
<li class="clearfix">
<a href="https://blog.csdn.net/lf0814/article/details/78552853" target="_blank">Android中事件传递机制的总结</a>
</li>
<li class="clearfix">
<a href="https://blog.csdn.net/lf0814/article/details/78549191" target="_blank">这可能是最快入门或最快熟悉RxJava2.x的教程</a>
</li>
</ul>
</div>
<div class="user-hotArticle sort ClassSort">
<h3>文章分类</h3>
<ul class="hotArticle-list sort-list ClassSort-list" style="height: 190px; overflow-y: hidden;">
<li class="clearfix">
<a href="https://blog.csdn.net/lf0814/article/category/6140951" class="odd-overhidden floatL">View</a>
<div class="read list-left floatR"><span>9篇</span></div>
</li>
<li class="clearfix">
<a href="https://blog.csdn.net/lf0814/article/category/6373892" class="odd-overhidden floatL">百度地图</a>
<div class="read list-left floatR"><span>1篇</span></div>
</li>
<li class="clearfix">
<a href="https://blog.csdn.net/lf0814/article/category/6408352" class="odd-overhidden floatL">EaseUI</a>
<div class="read list-left floatR"><span>1篇</span></div>
</li>
<li class="clearfix">
<a href="https://blog.csdn.net/lf0814/article/category/6475089" class="odd-overhidden floatL">RecycleView</a>
<div class="read list-left floatR"><span>1篇</span></div>
</li>
<li class="clearfix">
<a href="https://blog.csdn.net/lf0814/article/category/6830266" class="odd-overhidden floatL">Android Studio Lambda</a>
<div class="read list-left floatR"><span>1篇</span></div>
</li>
<li class="clearfix">
<a href="https://blog.csdn.net/lf0814/article/category/6842176" class="odd-overhidden floatL">人生-思想</a>
<div class="read list-left floatR"><span>2篇</span></div>
</li>
<li class="clearfix">
<a href="https://blog.csdn.net/lf0814/article/category/6842202" class="odd-overhidden floatL">material-design</a>
<div class="read list-left floatR"><span>1篇</span></div>
</li>
<li class="clearfix">
<a href="https://blog.csdn.net/lf0814/article/category/6906482" class="odd-overhidden floatL">异常</a>
<div class="read list-left floatR"><span>2篇</span></div>
</li>
<li class="clearfix">
<a href="https://blog.csdn.net/lf0814/article/category/6915482" class="odd-overhidden floatL">支付</a>
<div class="read list-left floatR"><span>1篇</span></div>
</li>
<li class="clearfix">
<a href="https://blog.csdn.net/lf0814/article/category/7108217" class="odd-overhidden floatL">开发环境</a>
<div class="read list-left floatR"><span>2篇</span></div>
</li>
<li class="clearfix">
<a href="https://blog.csdn.net/lf0814/article/category/7231288" class="odd-overhidden floatL">android</a>
<div class="read list-left floatR"><span>4篇</span></div>
</li>
<li class="clearfix">
<a href="https://blog.csdn.net/lf0814/article/category/7279507" class="odd-overhidden floatL">Java</a>
<div class="read list-left floatR"><span>1篇</span></div>
</li>
<li class="clearfix">
<a href="https://blog.csdn.net/lf0814/article/category/7291391" class="odd-overhidden floatL">RxJava</a>
<div class="read list-left floatR"><span>2篇</span></div>
</li>
</ul>
<div class="unfold-btn">
<span>展开</span><i class="icon iconfont icon-xiajiantou"></i>
</div>
</div>
<!-- [StartShowSelfColumn]-->
<!-- [EndShowSelfColumn]-->
<div class="user-hotArticle sort timeSort">
<h3>文章存档</h3>
<ul class="hotArticle-list timeSort-list" style="height: 190px; overflow-y: hidden;">
<li class="clearfix">
<a href="https://blog.csdn.net/lf0814/article/month/2018/01" class="odd-overhidden floatL">2018年1月</a>
<div class="read list-left floatR"><span>2篇</span></div>
</li>
<li class="clearfix">
<a href="https://blog.csdn.net/lf0814/article/month/2017/12" class="odd-overhidden floatL">2017年12月</a>
<div class="read list-left floatR"><span>1篇</span></div>
</li>
<li class="clearfix">
<a href="https://blog.csdn.net/lf0814/article/month/2017/11" class="odd-overhidden floatL">2017年11月</a>
<div class="read list-left floatR"><span>4篇</span></div>
</li>
<li class="clearfix">
<a href="https://blog.csdn.net/lf0814/article/month/2017/10" class="odd-overhidden floatL">2017年10月</a>
<div class="read list-left floatR"><span>2篇</span></div>
</li>
<li class="clearfix">
<a href="https://blog.csdn.net/lf0814/article/month/2017/08" class="odd-overhidden floatL">2017年8月</a>
<div class="read list-left floatR"><span>3篇</span></div>
</li>
<li class="clearfix">
<a href="https://blog.csdn.net/lf0814/article/month/2017/07" class="odd-overhidden floatL">2017年7月</a>
<div class="read list-left floatR"><span>1篇</span></div>
</li>
<li class="clearfix">
<a href="https://blog.csdn.net/lf0814/article/month/2017/06" class="odd-overhidden floatL">2017年6月</a>
<div class="read list-left floatR"><span>2篇</span></div>
</li>
<li class="clearfix">
<a href="https://blog.csdn.net/lf0814/article/month/2017/05" class="odd-overhidden floatL">2017年5月</a>
<div class="read list-left floatR"><span>5篇</span></div>
</li>
<li class="clearfix">
<a href="https://blog.csdn.net/lf0814/article/month/2017/04" class="odd-overhidden floatL">2017年4月</a>
<div class="read list-left floatR"><span>2篇</span></div>
</li>
<li class="clearfix">
<a href="https://blog.csdn.net/lf0814/article/month/2017/03" class="odd-overhidden floatL">2017年3月</a>
<div class="read list-left floatR"><span>1篇</span></div>
</li>
<li class="clearfix">
<a href="https://blog.csdn.net/lf0814/article/month/2017/02" class="odd-overhidden floatL">2017年2月</a>
<div class="read list-left floatR"><span>1篇</span></div>
</li>
<li class="clearfix">
<a href="https://blog.csdn.net/lf0814/article/month/2016/10" class="odd-overhidden floatL">2016年10月</a>
<div class="read list-left floatR"><span>1篇</span></div>
</li>
<li class="clearfix">
<a href="https://blog.csdn.net/lf0814/article/month/2016/09" class="odd-overhidden floatL">2016年9月</a>
<div class="read list-left floatR"><span>1篇</span></div>
</li>
<li class="clearfix">
<a href="https://blog.csdn.net/lf0814/article/month/2016/08" class="odd-overhidden floatL">2016年8月</a>
<div class="read list-left floatR"><span>1篇</span></div>
</li>
<li class="clearfix">
<a href="https://blog.csdn.net/lf0814/article/month/2016/03" class="odd-overhidden floatL">2016年3月</a>
<div class="read list-left floatR"><span>1篇</span></div>
</li>
</ul>
<div class="unfold-btn">
<span>展开</span><i class="icon iconfont icon-xiajiantou"></i>
</div>
</div>
<div class="user-hotArticle">
<h3>博主热门文章</h3>
<ul class="hotArticle-list csdn-tracking-statistics tracking-click" data-mod="popu_521">
-
Android环信EaseUI的快速集成
5570
-
Lambda 出现Cannot get property ‘destinationDir’ on null object错误提示
2831
-
Android百度地图集成后只显示网格不显示地图问题
2739
-
腾讯老司机的RecyclerView局部刷新爬坑之路
2653
-
修改手机状态栏字体的颜色(如:白底黑字)
2544
-
一个Activity中多个Fragment实现沉浸式状态栏
2254
-
1934
-
Google的Vysor使用时出现黑屏解决
1526
-
1479
-
1099