我有一个ListView活动,它通过自定义ArrayAdapter填充。有一组对象具有名为“isRead”的布尔属性。基于此属性的值,我想将行中某个TextView的字体设置为“normal”或“bold”。我还将文本的颜色设置为“灰色”或“黑色”
当Activity最初启动时,一切都按预期工作。如果isRead为true,则文本为灰色且具有普通字体。一旦我向下滚动列表然后再向上滚动,isRead为true的对象的文本将显示为灰色,但字体为粗体。
我在这里做错了吗?或者这是一些Android的陌生感?
ArrayAdapter代码如下:
public View getView(int position, View convertView, ViewGroup parent) {
LayoutInflater inflater = getLayoutInflater();
View row = convertView;
ArticleListRowViewWrapper wrapper=null;
if (row == null) {
row=inflater.inflate(R.layout.articlesrow, parent, false);
wrapper = new ArticleListRowViewWrapper(row);
row.setTag(wrapper);
} else {
wrapper = (ArticleListRowViewWrapper)row.getTag();
}
Article a = articles.get(position);
String dateString = df.format(a.getPubDate());
TextView titleLabel=wrapper.getTitleLabel();
Typeface tf = titleLabel.getTypeface();
if (a.getIsRead()) {
titleLabel.setTextColor(Color.GRAY);
titleLabel.setTypeface(tf, Typeface.NORMAL);
} else {
titleLabel.setTextColor(Color.BLACK);
titleLabel.setTypeface(tf, Typeface.BOLD);
}
titleLabel.setText(a.getTitle());
TextView dateLabel =wrapper.getDateLabel();
dateLabel.setText(dateString);
return row;
}
}
答案 0 :(得分:1)
我能够使用以下更改的代码段来实现此功能:
Typeface tf = titleLabel.getTypeface();
if (a.getIsRead()) {
titleLabel.setTextColor(Color.GRAY);
titleLabel.setTypeface(Typeface.create(tf, Typeface.NORMAL));
} else {
titleLabel.setTextColor(Color.BLACK);
titleLabel.setTypeface(Typeface.create(tf, Typeface.BOLD));
}
所有这些都归功于CommonsWare的帮助。