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& ...
随机推荐
- HTML&CSS学习笔记
<table> <thead> <tr> // table row <th></th> // table head & ...
- java.lang.NumberFormatException: multiple points问题
一般这种问题主要是因为SimpleDateFormat在多线程环境下,是线程不安全的,所以如果你在多线程环境中共享了SimpleDateFormat的实例,比如你在类似日期类中定义了一个全局的Simp ...
- java面试题大全-基础方面 答案自己写
Java基础方面: 1.作用域public,private,protected,以及不写时的区别 2.Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类, ...
- 自适应阈值二值化之最大类间方差法(大津法,OTSU)
最大类间方差法是由日本学者大津(Nobuyuki Otsu)于1979年提出的,是一种自适应的阈值确定的方法,又叫大津法,简称OTSU.它是按图像的灰度特性,将图像分成背景和目标2部分.背景和目标之间 ...
- 类 __new__方法实现单例
继承了单例的类,子类也是单例模式
- 康托展开&&康托逆展开
康托展开 简介:对于给定的一个排列,求它是第几个,比如54321是n=5时的第120个.(对于不是1~n的排列可以离散化理解) 做法: ans=a[n]*(n-1)!+a[n-1]*(n-2)!+~~ ...
- [Web安全] XXE漏洞攻防学习(上)
0x00.XXE漏洞 XXE漏洞全称XML External Entity Injection 即xml外部实体注入漏洞,XXE漏洞发生在应用程序解析XML输入时,没有禁止外部实体的加载,导致可加载恶 ...
- (数据分析)第02章 Python语法基础,IPython和Jupyter Notebooks.md
第2章 Python语法基础,IPython和Jupyter Notebooks 当我在2011年和2012年写作本书的第一版时,可用的学习Python数据分析的资源很少.这部分上是一个鸡和蛋的问题: ...
- [CC-PERMUTE]Just Some Permutations 3
[CC-PERMUTE]Just Some Permutations 3 题目大意: \(T(T\le10^5)\)次询问,每次询问有多少长度为\(n(n\le10^6)\)的排列,满足任意相邻两个数 ...
- BZOJ3019 : [Balkan2012]handsome
首先预处理出$f[i][j][k]$表示长度为$i$的序列,第一个位置是$j$,最后一个位置是$k$时合法的方案数. 从后往前枚举LCP以及那个位置应该改成什么. 用线段树维护区间内最左最右的已经确定 ...