2011-08-05 42 views
0

我有一些问题与ListView(它更像是一个视觉问题的),它会记住如TextViews文本值数据,从ListView的行,但缠结或忘记关于TextViews背景颜色方面。 只有当ListView包含许多行时,问题才会显示。我有一个SimpleCursorAdapterViewBinder工作,并希望如果发生状况,突出一个TextViewListView和记忆数据

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的背景,我似乎无法找到bug或ListView的逻辑。

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

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

回答

0

相同新手

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

  • setViewValue(..)被调用每一个“FROM - ”为显示的每一行结合,即使对于已经膨胀行,并通过滚动向上/向下他们得到了再次显示;

  • 和关于我再再一段代码,对于被再次显示的一行: ((TextView) view).setText(display); - 将设置正确的内容,相同的时间戳会得到处理......但是,如果它不经过:

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

  • 背景反正我有一个else ((TextView) view).setBackgroundResource(0);添加到我的if