ListView缓存机制踩过的坑
ListView,GrildView使用时候经常会用到缓存机制,随意一搜,例子成千上万,但是讲解都是很一致,跟自己踩的坑很少有人讲解到。
测试 需求: GrildView 分三列显示,默认背景为白色,如果当前ID能被2整除 就显示一张图片,如果能被三整除并且不能被2整除 背景变成灰色。
getView代码:

运行显示:第一张图未进行滑动之前显示正常,然后随意滑动回来显示第二张图,呵呵,那么问题来了,图片顺序错乱了,但是为什么名字没错乱呢,呵呵,这一切都是缓存没有用好惹的货。


回过头再进行分析getView中的代码,我们知道,缓存会记录当前界面的View的状态,那么,滑动回来,之所以文字没有错乱是因为每次都是重新赋值的,但是我们的view确是有条件的判断赋值的,也就是说 没有重新赋值,会在上一个界面的缓存状态中在进行判断,就造成了 灰色背景上会出现图片这一错乱问题,解决方法就是,106-109行的代码注释掉,取消注释,每次过来一屏都重新给view赋值,就不会出现顺序错乱了。

ListView缓存机制踩过的坑的更多相关文章
- 再次探究Android ListView缓存机制
		
概述 虽然现在5.0后Google推出了RecycleView,但在5.0 Lollipop普及前Listview仍会被广泛使用,所以打算再次探究一下Listview的源码,了解一下Listview ...
 - 解决ListView 缓存机制带来的显示不正常问题
		
ListView加载数据原理:系统绘制ListView时,首先会用getCount()函数得到要绘制的这个列表的长度,然后开始逐行绘制.然后调用getView()函数,在这个函数里面首先获得一个Vie ...
 - Android性能优化之ListView缓存机制
		
要想优化ListView首先要了解它的工作原理,列表的显示须要三个元素:ListView.Adapter.显示的数据. 这里的Adapter就是用到了适配器模式,无论传入的是什么View在ListVi ...
 - Android笔记(二十五) ListView的缓存机制与BaseAdapter
		
之前接触了ListView和Adapter,Adapter将数据源和View连接起来,实际应用中,我们要显示的数据往往有很多,而屏幕只有那么大,系统只能屏幕所能显示的内容,当我们滑动屏幕,会将旧的内容 ...
 - RecyclerView 源码分析(二) —— 缓存机制
		
在前一篇文章 RecyclerView 源码分析(一) -- 绘制流程解析 介绍了 RecyclerView 的绘制流程,RecyclerView 通过将绘制流程从 View 中抽取出来,放到 Lay ...
 - [转]Android ListView 与 RecyclerView 对比浅析—缓存机制
		
从源码角度剖析ListView 与 RecyclerView 缓存机制的不同 https://zhuanlan.zhihu.com/p/23339185 原文地址:http://dev.qq.com/ ...
 - 【腾讯Bugly干货分享】Android ListView与RecyclerView对比浅析--缓存机制
		
本文来自于腾讯bugly开发者社区,非经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/5811d3e3ab10c62013697408 作者:黄宁源 一,背景 Recy ...
 - 自己定制ListView,上拉刷新和下拉刷新,加载网络图片,并且添加缓存机制。
		
package com.lixu.listviewrefresh; import java.util.ArrayList; import java.util.HashMap; import java. ...
 - 探究ListView 的缓存机制
		
概述 ListView 是继承AbListView,AbListView是所有列表类控件的基类. ListView的数据加载 在ListView数据加载中最关键的一个函数就是makeAndAddVie ...
 
随机推荐
- iOS之 PJSIP静态库编译(三)
			
dada哪个所有静态库编译完成后还是不能运行那个demo,提示你找不到arm**.a 你lipo后要记得吧合并成.a 名字更改成你最后编译版本生成的.a名字....... 或者吧所有库add到你的工 ...
 - 问题解决——MFC SDI程序 CFormView中控件随窗口缩放
			
从来都是做对话框程序,这次想做个SDI的程序,想着用一下带Robbin界面的office2007风格,就不用使用那些花钱的商业控件/UI库了. 如果你不想看我打的文字,可以直接拷走代码,自己声明上定义 ...
 - cocos2d-x之场景转换特效
			
bool HelloWorld::init() { if ( !Layer::init() ) { return false; } Size visibleSize = Director::getIn ...
 - Heartbeat+LVS构建高可用负载均衡集群
			
1.heartbeat简介: Heartbeat 项目是 Linux-HA 工程的一个组成部分,它实现了一个高可用集群系统.心跳服务和集群通信是高可用集群的两个关键组件,在 Heartbeat 项目里 ...
 - c#发送http请求
			
直接代码,自己备用 /** * @method:生成验证码 */ [JSONMethod] [Description ( "生成验证码" )] [DomTemplate ( )] ...
 - 聚合数据天气预报API-ajax 通过城市名取数据
			
如需要,可申请聚合数据天气预报API:https://www.juhe.cn/docs/api/id/39,并生成AppKey. 接口地址:http://v.juhe.cn/weather/index ...
 - zookeeper适用场景:如何竞选Master及代码实现
			
问题导读:1.如何利用zookeeper保证集群Master可用性和唯一性?2.zookeeper竞选Master包含哪些过程?3.zookeeper竞选Master机制利用了zk哪些特性? 在zoo ...
 - J2EE笔记3
			
7. MVC 设计模式. 6. 和属性相关的方法: 1). 方法 void setAttribute(String name, Object o): 设置属性 Object getAttribute( ...
 - POJ 3233 Matrix Power Series --二分求矩阵等比数列和
			
题意:求S(k) = A+A^2+...+A^k. 解法:二分即可. if(k为奇) S(k) = S(k-1)+A^k else S(k) = S(k/2)*(I+A^(k/2)) ...
 - UVALive 6663 Count the Regions --离散化+DFS染色
			
题意:给你n(n<=50)个矩形(左上角坐标和右下角坐标),问这些矩形总共将平面分成多少个部分.坐标值可能有1e9. 分析:看到n和坐标的范围,容易想到离散化,当时就没想到离散化以后怎么判断区域 ...