上下文
我有一个活动列出了游标返回的所有消息线程,并将它们绑定到ListView。
我的目标是什么:
我想根据游标的任何值自定义ListView的任何行。我的意思是如果线程不包含读取消息,我想将textcolor设置为蓝色(=>“not read”)。
问题是:
Listview会在滚动时缓存一些视图,因此读取所有消息的某些线程会随机显示为蓝色。
我尝试了所有这些选项,但它一直保持缓存:
view.setDrawingCacheEnabled(false);
view.setAnimationCacheEnabled(false);
view.setScrollingCacheEnabled(false);
view.setAlwaysDrawnWithCacheEnabled(false);
view.setDrawingCacheEnabled(false);
view.setWillNotCacheDrawing(true);
view.invalidate();
有什么建议吗?
编辑1
我试图在扩展SimpleCursorAdapter的类中以这种方式覆盖bindView:
@Override
public void bindView(View v, Context context, Cursor c) {
TextView tv_name = (TextView) v.findViewById(R.id.tv_name);
//we set the name of the src/dst of the msg
tv_name.setText(c.getString(5));
//if there are not read msg, we set the textColor to BLUE
if (cursor.getInt(8) != 0){
tv_name.setTextColor(Color.BLUE);
}
}
答案 0 :(得分:0)
尝试
if (cursor.getInt(8) != 0){
tv_name.setTextColor(Color.BLUE);
} else{
// set text to the default color
tv_name.setTextColor(Color.BLACK);
}
由于listView中使用的视图已被回收,因此您需要处理所有情况。