android listview优化:滑动时颜色错乱问题
最近android的listview写多了,也学习了各种listview的优化,列如viewHolder的使用。今天做item颜色设置时遇到一个新的问题。我这里设置“未完成”是灰色的,“已完成”是蓝色。我在item.xml设置所有字体都是灰色的,然后在viewholder设置颜色变化,当为“已完成”时设置为蓝色,这样的逻辑似乎一切正常,但当我测试时滑动listview,下面的“未完成”居然变成蓝色的!!!以下是Adapter的代码
public class ToneListAdapter extends ArrayAdapter<ToneList> {
private int resource;
public ToneListAdapter(Context context, int resource, List<ToneList> objects) {
super(context, resource, objects);
// TODO Auto-generated constructor stub
this.resource = resource;//resource为listView的每个子项的布局id
}
View view;
ViewHolder viewHolder;
if(convertView==null){
view = LayoutInflater.from(getContext()).inflate(resource, null);
viewHolder = new ViewHolder();
viewHolder.toneTitle =(TextView) view.findViewById(R.id.tv_tone_title);
viewHolder.toneTime =(TextView) view.findViewById(R.id.tv_tone_time);
viewHolder.toneFinish = (TextView) view.findViewById(R.id.tv_tone_finish);
viewHolder.toneBeginStudy = (ImageView) view.findViewById(R.id.img_tone_beginStudy);
viewHolder.toneLookResult = (ImageView) view.findViewById(R.id.img_tone_lookresult);
view.setTag(viewHolder);
}else {
view = convertView;
viewHolder = (ViewHolder) view.getTag();
}
final ToneList classList = getItem(position);//获得实例,final才能被onclick等内部类引用,position需要被引用也需要加final
if(classList!=null){
viewHolder.toneTitle.setText(classList.getTitle());
viewHolder.toneTime.setText(classList.getTime());
viewHolder.toneFinish.setText(classList.getFinish());
if(classList.getFinish().equals("已完成")){
//setTextColor(R.color.finish_blue)无效
viewHolder.toneFinish.setTextColor(getContext().getResources().getColor(R.color.finish_blue));//没作用?
}
//进入学习监听器
viewHolder.toneBeginStudy.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Toast.makeText(getContext(), classList.getTitle()+"begin study", Toast.LENGTH_SHORT).show();
}
});
//查看成绩监听器
viewHolder.toneLookResult.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Toast.makeText(getContext(), classList.getTitle()+"LookResult", Toast.LENGTH_SHORT).show();
}
});
}
return view;
}
这是为什么?后来我查了listView滑动的机制才发现:listView被滑动时,移出视图的item会被缓存下来,下面的item会复用移出的item的样式!我的解决方法是:也设置未完成的颜色。这样每次getView就会重新设置一次。
if(classList.getFinish().equals("已完成")){
//setTextColor(R.color.finish_blue)无效
viewHolder.toneFinish.setTextColor(getContext().getResources().getColor(R.color.finish_blue));//没作用?
}
else{//一定要写else设置未完成,不然当滑动列表时,会有背景色错位
viewHolder.toneFinish.setTextColor(getContext().getResources().getColor(R.color.finish_No));
}
android listview优化:滑动时颜色错乱问题的更多相关文章
- $ListView的优化机制和滑动时数据错乱的讨论
Refer:http://www.myexception.cn/mobile/1612364.html (一)Android ListView的基本用法 1.创建一个实体类Person,为其添加Get ...
- Android 去掉ScrollView、GridView、ListView向上 滑动时顶部的投影/阴影
在ScrollView.GridView.ListView向上滑动的过程中,这些控件的顶部会出现一个系统默认的白色阴影,有些时候这个白色的阴影看上去好看,那么就需要除去. 去掉方法:在ScrollVi ...
- listView解决滑动时黑色背景问题
listView.setCacheColorHint(Color.TRANSPARENT);//解决滑动时黑色背景问题 listView滑动时黑色背景问题 原因在于ListView存在缓存颜色机制,因 ...
- Android——ListView优化
1.ListView基本概念 列表显示需要三个元素: ListView:用来展示列表的View. 适配器:用来把数据映射到ListView上 数据:具体的将被映射的字符串,图片或基本组件 适配器类型分 ...
- android listview 优化
韩梦飞沙 韩亚飞 313134555@qq.com yue31313 han_meng_fei_sha android convertview作用 ======= 1,convertView复 ...
- android ListView 在初始化时多次调用getView()原因分析
今天在做一个功能:在初始化ListView时,把第一行背景置为黄色,同时保存第一行对象,用于在点击其他行时将该行重新置为白色. if(position==0){ convertView.setBack ...
- listview选中滑动时背景变黑
喵的今天调这个一直以为是背景色的问题,花了好多时间 下面才是解决方法:转自:http://daijun74.iteye.com/blog/1175143 手指在ListView上下滚动时,ListVi ...
- android ListView优化
android ListView通过优化重用历史缓存实现.listview相应的数据适配器一般使用自己定义BaseAdapter子类,重用历史缓冲区来提高性能. 例如,下面的示例代码演示: 1.lis ...
- Android ListView无数据项时提示
只需要调用在代码中调用setEmptyView(View emptyView)设置ListView为空时显示这个TextView即可. 布局文件 <?xml version="1.0& ...
随机推荐
- 大数据在教育中的应用 part2笔记
什么是交叉检验(K-fold cross-validation) K层交叉检验就是把原始的数据随机分成K个部分.在这K个部分中,选择一个作为测试数据,剩下的K-1个作为训练数据. 交叉检验的过程实 ...
- 【AtCoder】CODE FESTIVAL 2017 qual A
A - Snuke's favorite YAKINIKU -- #include <bits/stdc++.h> #define fi first #define se second # ...
- zabbix 检测icmp参数
UserParameter=ICMPresult,ping -c 4 10.128.1.22 &> /dev/null;echo $?
- BZOJ1303 [CQOI2009]中位数图 其他
欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ1303 题意概括 给出1~n的一个排列,统计该排列有多少个长度为奇数的连续子序列的中位数是b.中位数 ...
- Vijos1906 联合权值 NOIP2014Day1T2 树形动态规划
欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - Vijos1906 题意概括 有一棵树,每一个节点都有一个权值w[i].下面说的x,y都是该树中的节点. 对于 ...
- 078 Hbase中rowkey设计原则
1.热点问题 在某一时间段,有大量的数据同时对一个region进行操作 2.原因 对rowkey的设计不合理 对rowkey的划分不合理 3.解决方式 rowkey是hbase的读写唯一标识 最大长度 ...
- POJ1006 Biorhythms【中国剩余定理】
<题目链接> 题目大意: 人体的体力每23天会达到峰值,情感每28天会达到峰值,智力每33天会达到峰值,一个人在a天体力达到峰值,b天情感达到峰值,c天智力达到峰值,求这个人下一次体力情感 ...
- HDU 1495 非常可乐【BFS】
题目链接:https://vjudge.net/problem/HDU-1495 转载于:https://www.cnblogs.com/ECJTUACM-873284962/p/6750320.ht ...
- TensorFlow 2.0 新特性
安装 TensorFlow 2.0 Alpha 本文仅仅介绍 Windows 的安装方式: pip install tensorflow==2.0.0-alpha0 # cpu 版本 pip inst ...
- 大数据系列博客之 --- 深入简出 Shell 脚本语言(基础篇)
首先声明,此系列shell系列博客分为四篇发布,分别是: 基础篇:https://www.cnblogs.com/lsy131479/p/9914747.html 提升篇:https://www.cn ...