0

我对 a 有一些问题ListView(这更像是一个视觉问题),它会记住来自TextViewsListView行的文本值等数据,但会混淆或忘记有关TextViews背景颜色的方面。仅当ListView包含许多行时才会出现问题。我使用 aSimpleCursorAdapter和 aViewBinder并希望在TextView出现条件时突出显示 a:

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似乎会混淆背景颜色。有时当我重新滚动时,它再次改变了TextView' 的背景,我似乎无法找到错误或ListView' 的逻辑。

那么,setViewValue(..)每次在对一行进行充气之前都会调用该方法吗?即使您向上或向下滚动并且不再可见的行再次可见?或者该setViewValue(..)方法仅在初始行膨胀过程中调用,然后创建的对象保存在ListView的内存中?

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

4

1 回答 1

0

同一个新手

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

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

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

    if(timestamp+DaysToMillis(5)> new Date().getTime()) ((TextView) view).setBackgroundResource(R.color.marker_red); - 当前的 TextView 可能具有来自回收的 TextView 的背景作为背景

  • 无论如何,我必须在else ((TextView) view).setBackgroundResource(0);我的if

于 2011-08-06T17:11:21.223 回答