0

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

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

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);
}

但这里的问题是它不会改变一个特定的文本视图。假设第一封电子邮件未读,其余的已读。它使列表视图中的每个项目都以 color_email_read 字体颜色显示,并且也没有字体更改。

知道如何按照我想要的方式管理它吗?原因与 Android 没有重新使用视图但无法找出解决方案有关。

更新:它与 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
4

1 回答 1

0

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

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

if(isUnread) {
     ...
} else {
     viewHolder.subject.setTypeFace(whatever_your_read_font_is);
}
于 2013-01-30T14:08:36.540 回答