【问题标题】:ListView and remembering dataListView 和记忆数据
【发布时间】:2011-08-05 20:30:35
【问题描述】:

我对@9​​87654321@ 有一些问题(这更像是一个视觉问题),它会记住来自TextViews 的文本值等数据,来自ListView 的行,但会混淆或忘记与@ 相关的方面987654324@ 背景颜色。 仅当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 的内存中?

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

【问题讨论】:

    标签: android android-listview android-viewbinder


    【解决方案1】:

    同样的新手

    在我看来(如果我错了,请纠正我...尤其是如果您是罗马人)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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-01
      • 1970-01-01
      • 2012-11-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多