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)视图)代码>到我的如果