简单说一下我是如何解决 ViewPager 在 notifyDataChanged 之后不及时刷新的问题的
来源:互联网 发布:hadoop mac和linux 编辑:程序博客网 时间:2024/04/28 05:40
前言
最近忙于一个项目,其中需要用到 ViewPager 展示若干图片,也就是相当于有一个水平分页显示图片列表的需求。由于之前没有接触过 ViewPager,于是决定新开一个 Demo 程序,学学这个 ViewPager。
随手一个 Google 就能找到教程和文档,于是啪啦啪啦键盘,一个基本的实现就出来了。
问题描述
我在 Demo 里边实现了两个基本操作,add 和 remove,测试的时候就问题就来了,简单地说就是 ViewPager 的刷新问题,如图,一搜一大把。
我浏览了其中一些,但是感觉最有用的就是这一篇,来自 diygreen 的一篇博文:
ViewPager刷新问题详解- 简书
在里面作者提出了解决方案,
那就是直接一刀切:重写 PagerAdapter 的 getItemPosition(Object object) 方法,将返回值固定为 POSITION_NONE。这种方式有一个需要注意的地方,就是重写 destoryItem() 方法:
@Overridepublic void destroyItem(ViewGroup container, int position, Object object) { // 把 Object 强转为 View,然后将 view 从 ViewGroup 中清除 container.removeView((View) object);}
同时作者也说明了该方案的缺点,
有个很明显的缺陷,那就是会刷新所有的 Item,这将导致系统资源的浪费,所以这种方式不适合数据量较大的场景。
缺点显而易见,虽然作者在后面也提出了优化方案(具体请查看作者原文),但我弱弱的觉得方案仍然不够好,因为我想到一个自己觉得还不错的点子,所以才发表本篇博文希望能与大家分享和讨论。(说了半天废话,终于有了重点,23333~)
我的解决方案
下面给出我的解决方案,请看代码:
@Overridepublic int getItemPosition(Object object) { if (viewList.contains((View) object)) { // 如果当前 item 未被 remove,则返回 item 的真实 position Log.e("view is contains", true + ""); return viewList.indexOf((View) object); } else { // 否则返回状态值 POSITION_NONE Log.e("view is contains", false + ""); return POSITION_NONE; }}
经过我的测试,暂时未发现这样写又引入新的 bug,觉得效果还可以,简单的录制了一个 GIF 截图,如下
希望大加如果采用了我的方案,能够给我一条评论,提出问题也好,表示鼓励也好,谢谢~
- 简单说一下我是如何解决 ViewPager 在 notifyDataChanged 之后不及时刷新的问题的
- 已解决:ViewPager的notifyDataSetChanged不刷新问题
- android setVisibility(GONE)不及时刷新的问题
- 解决Gradle插件在eclipse或打包时不及时更新缓存的问题
- TortoiseSVN刷新不及时的解决办法
- 解决hibernate查询不及时同步的问题
- 解决viewpager adpter.notifyDataSetChanged不刷新问题
- 解决在拍照之后,Media数据没有及时更新问题
- viewpager的刷新问题
- notifyDataChanged不起作用的原因
- cell image不能及时刷新的问题。
- es索引不会及时刷新的问题
- 关于activity被重启后viewpager的数据不刷新的问题
- 解决Viewpager在调用notifyDataSetChanged()时,界面无刷新的问题
- 简单说一下const在各个位置的含义
- 简单说一下上线前apk加密的问题
- RN中Reload之后界面不刷新的问题
- 简单的说一下MYSQL的AA复制和使用MMM解决MYSQL数据复制的问题
- 冒泡,选择,插入排序方法
- 跨园区容灾,升级不停服——高可用负载均衡集群实践
- jsp九大内置对象和四种属性范围介绍
- MySQL的时间字段的选择
- Huber损失最小化学习法
- 简单说一下我是如何解决 ViewPager 在 notifyDataChanged 之后不及时刷新的问题的
- URAL
- Gym
- 计算机科学和编程导论-week2-函数
- SQL注入
- c语言 背包问题dfs方法
- VS或VC调用matlab程序
- linux下搜狗输入法不能输入中文的解决方案
- poj 3292 打表