更改listview中特定textview的字体颜色/字体

时间:2013-01-30 13:45:16

标签: android listview android-listview textview

有类似的问题,但没有一个能解决我的问题。

我有一个填充了电子邮件的列表视图。我想要做的是在不读取电子邮件时显示不同的文本颜色和字体。所以相关代码基本上是这样的:

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

1 个答案:

答案 0 :(得分:0)

但是可能与isUnread正在填充有关。如果它总是假的,那么显然会使你的所有项目都成为color_email_read。它应该从适配器数据源中的某些内容中提取,而不是与视图本身相关的任何内容。

此外,这实际上与您的问题相反,但我相信如果您将if(isUnread)保留在代码中,您将看到实际读取的未读字体中出现的项目。除非你已经有代码在其他地方执行此操作,否则你应该添加类似的东西来避免这个问题:

if(isUnread) {
     ...
} else {
     viewHolder.subject.setTypeFace(whatever_your_read_font_is);
}