ListView和记住数据

时间:2011-08-05 20:30:36

标签: android android-listview android-viewbinder

我遇到ListView的问题(这更像是一个视觉问题),它会记住来自TextViews行的ListView中的文本值等数据,但是会出现问题或忘记有关TextViews背景颜色的方面。 仅当ListView包含许多行时,问题才会出现。我使用SimpleCursorAdapterViewBinder,并希望在条件发生时突出显示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似乎纠缠了背景颜色。有时当我重新滚动时,它会再次改变TextView的背景,我似乎无法找到错误或ListView的逻辑。

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

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

1 个答案:

答案 0 :(得分:0)

相同的新手

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

  • 为每一行显示的“FROM - TO”绑定调用setViewValue(..),即使对于已经充气的行也是如此,通过向上/向下滚动它们会再次显示;

    < / LI>
  • 关于我的一段代码,对于一行再次显示: ((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