notifyItemChanged(int position) 引起的返回时RecyclerView页面不自然的跳动
来源:互联网 发布:手机做淘宝客怎么做 编辑:程序博客网 时间:2024/04/29 14:57
问题
如图显示
产生从详情返回至列表页时,下方的Item有个向上的动画。我在返回的同时有发一个eventBus,其中我调用了notifyItemChanged(int position)
方法,我首先想到的是添加mRecyclerView.getItemAnimator().setChangeDuration(0);
此方法(因为以前发生过页面闪的动画),但是很不幸的是加了此代码之后还是会有此问题。
然后我再利用排除法把notifyItemChanged(int position)
这行代码注释一下,看看是不是由此影响的刷新情况。注释之后果然返回的时候已经不会刷了,但是我必须按照要求详情改变了数据之后需要刷新列表的数据,所以这行代码是不可以删除的。于是我经过大量的返回测试之后我发现了,这个向上的动画只有在列表当中有图片才回出现,所以这时候想到的原因应该就是因为重新绘制了一遍图片的宽高,所以才会有下面的item发生位置的变化,这个时候我想到的解决办法是能不能回调刷新的时候不刷新图片,只刷新我需要的数据。所以debug了一下,发现了notifyItemChanged(int position)
走的是notifyItemRangeChanged(int positionStart, int itemCount, Object payload)
同时在Adapter当中都是走onBindViewHolder(VH holder, int position, List<Object> payloads)
,这其中都有payload
这个东东,所以我先google了一下,在这篇文章当中找到了解释,原来只需要在你自己的adapter重写一下onBindViewHolder(VH holder, int position, List<Object> payloads)
这个方法,当然要不影响你原来的recyclerView的adapter应该做好判断,例如:
``` @Override public void onBindViewHolder(ViewHolder holder, int position) { holder.updatePosition(position); convert(holder, getItem(position)); } @Override public void onBindViewHolder(ViewHolder holder, int position, List<Object> payloads) { if (payloads.isEmpty()) { onBindViewHolder(holder, position); } else { holder.updatePosition(position); convert(holder, getItem(position), payloads); } }```
根据payloads是否又传值来判断是走那个方法。
还有一个很关键的是需要注意如果你是用了一个adapterWarpper
重新包装了一下adpater
(例如给adapter
增加头部,增加底部),同样要记得在adapterWapper
当中重写走onBindViewHolder(VH holder, int position, List<Object> payloads)
此方法。
``` @Override public void onBindViewHolder(ViewHolder holder, int position) { wrapped.onBindViewHolder(holder, position); } @Override public void onBindViewHolder(ViewHolder holder, int position, List payloads) { wrapped.onBindViewHolder(holder, position, payloads); }```
阅读全文
0 0
- notifyItemChanged(int position) 引起的返回时RecyclerView页面不自然的跳动
- Recyclerview默认动画导致调用notifyItemChanged(position)更新时ViewHolder变动引起的问题
- android RecyclerView notifyItemChanged无效的问题
- 链接的onclick事件 引起页面的跳动
- RecyclerView通过notifyItemChanged方法更新item时避免闪烁的方法
- recyclerView调用notifyItemChanged导致屏幕闪烁的问题
- 《android编程权威指南》RecyclerView的notifyItemChanged()方法使用
- a链接为空时,页面跳动的解决办法
- Recyclerview的getChildAt(position)方法获取可见第一条的view返回null;
- RecyclerView notifyItemChanged 后 item 闪动
- RecyclerView调用notifyItemChanged闪烁问题
- 解决recyclerview notifyItemChanged 闪烁问题
- RecyclerView adapter position 和 layout position的区别
- RecyclerView滑动到指定Position的方法
- 自然的阴谋论和不自然的科学思维
- JavaScript实现在web页面显示跳动的时间
- 如何解决滚动条使页面跳动的问题
- Java 泛型学习 泛型擦除带来的不自然
- 安卓开发技术之持久化技术
- android 切换栏目 SmartTabLayout的使用
- PAT (Advanced Level) Practise 1070 Mooncake (25)
- 彻底弄懂Javascript闭包
- Java中Math类的常用方法
- notifyItemChanged(int position) 引起的返回时RecyclerView页面不自然的跳动
- 关于request.getAttribute()获取值的强转问题
- ipa上传app store的大小限制
- 上周关于任务中遇到的问题小总结
- 设计模式(4)-建造者模式
- DragonBoard 410C中的Fastboot与调试串口注意事项
- lintcode -- 克隆二叉树
- python中sqlit的使用
- 类的继承和对象引用