如何防止listview缓存

时间:2015-11-29 12:36:57

标签: android listview caching android-listview

上下文

我有一个活动列出了游标返回的所有消息线程,并将它们绑定到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);

    }

}

1 个答案:

答案 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中使用的视图已被回收,因此您需要处理所有情况。