Android ListView和记忆数据

Android ListView和记忆数据,android,android-listview,android-viewbinder,Android,Android Listview,Android Viewbinder,我对列表视图有一些问题(这更像是一个视觉问题),它会记住文本视图中的文本值等数据,以及列表视图的行中的文本值,但会混淆或忘记有关文本视图背景色的方面。 只有当列表视图包含许多行时,问题才会出现。我使用SimpleCursorAdapter和ViewBinder并希望在出现以下情况时突出显示TextView: 在ViewBinder实现中: public boolean setViewValue(View view, Cursor cursor, int columnIndex) { Ch

我对
列表视图
有一些问题(这更像是一个视觉问题),它会记住
文本视图
中的文本值等数据,以及
列表视图
的行中的文本值,但会混淆或忘记有关
文本视图
背景色的方面。 只有当
列表视图
包含许多行时,问题才会出现。我使用
SimpleCursorAdapter
ViewBinder
并希望在出现以下情况时突出显示
TextView

ViewBinder
实现中:

public boolean setViewValue(View view, Cursor cursor, int columnIndex) {
    CharSequence display;
    if(view.getId() == R.id.dueDate){
        long timestamp = Long.parseLong(cursor.getString(3));
        display=DateUtils.getRelativeTimeSpanString(timestamp); 

        if(timestamp+DaysToMillis(5)> new Date().getTime())
        ((TextView) view).setBackgroundResource(R.color.marker_red);

        ((TextView) view).setText(display);
        return true; 
    }
    else
        return false;
}
同样:当有很多行时,
ListView
似乎会混淆背景色。有时,当我重新滚动时,它会再次更改
文本视图的背景,而我似乎找不到bug或
列表视图的逻辑

那么,
setViewValue(..)
方法是否在每次膨胀行之前都会被调用?即使你向上或向下滚动,一行不再可见,但它会再次可见吗?或者只为初始行膨胀过程调用
setViewValue(..)
方法,然后将创建的对象保留在
ListView
的内存中

注意:同一
TextView
中的文本值显示正确。我在相同的
setViewValue(..)
方法中使用了相同的逻辑。

相同的新手

在我看来(如果我错了,请纠正我…特别是如果你是一个罗马人),ViewBinder使用它的setViewValue方法回收listView的行

  • setViewValue(..)被调用用于显示的每一行的每个“从-到”绑定,即使是已经膨胀的行,并且通过上/下滚动再次显示它们

  • 关于我积累的代码,对于再次显示的行:
    ((文本视图)视图).setText(显示)-将设置正确的内容,将处理相同的时间戳。。。但如果它没有通过:

    if(timestamp+DaysToMillis(5)>newdate().getTime())
    ((文本视图)视图).setBackgroundResource(R.color.marker_-red)
    -当前TextView的背景可能与回收的TextView的背景相同

  • 无论如何,我必须添加一个
    else((TextView)视图)到我的
    如果