有类似的问题,但没有一个能解决我的问题。
我有一个填充了电子邮件的列表视图。我想要做的是在不读取电子邮件时显示不同的文本颜色和字体。所以相关代码基本上是这样的:
int color = isUnread ? R.color.color_email_unread : R.color.color_email_read;
viewHolder.subject.setTextColor(color);
if (isUnread){
Typeface font = FontFactory.getInstance().getFont(context, "MyFont");
viewHolder.subject.setTypeface(font);
}
但问题在于它不会改变一个特定的文本视图。假设第一封电子邮件未读,剩下的就被阅读了。它使listview中的每个项目都采用color_email_read字体颜色,并且没有字体更改。
知道如何以我想要的方式管理它吗?原因与Android没有重新使用视图有关,但无法找出解决方案。
UPDATE:它与isUnread返回的内容无关,因为它总是返回预期的值:
01-30 16:47:42.837: D/EmailListAdapter(5837): isUnread: false
01-30 16:47:42.837: D/EmailListAdapter(5837): isUnread - subject: linktest3 - text color should be: 2131427330
0
01-30 16:47:42.872: D/EmailListAdapter(5837): isUnread: false
01-30 16:47:42.872: D/EmailListAdapter(5837): isUnread - subject: subjectttttttttt - text color should be: 2131427330
01-30 16:47:42.922: D/EmailListAdapter(5837): isUnread: false
01-30 16:47:42.922: D/EmailListAdapter(5837): isUnread - subject: unread test - text color should be: 2131427330
01-30 16:47:42.972: D/EmailListAdapter(5837): isUnread: true
01-30 16:47:42.972: D/EmailListAdapter(5837): isUnread - subject: from unread test - text color should be: 2131427340
答案 0 :(得分:0)
但是可能与isUnread正在填充有关。如果它总是假的,那么显然会使你的所有项目都成为color_email_read。它应该从适配器数据源中的某些内容中提取,而不是与视图本身相关的任何内容。
此外,这实际上与您的问题相反,但我相信如果您将if(isUnread)保留在代码中,您将看到实际读取的未读字体中出现的项目。除非你已经有代码在其他地方执行此操作,否则你应该添加类似的东西来避免这个问题:
if(isUnread) {
...
} else {
viewHolder.subject.setTypeFace(whatever_your_read_font_is);
}