在ListView中设置TextView属性 - 奇怪的结果

时间:2010-05-20 13:58:08

标签: android

我有一个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;
    }
}

1 个答案:

答案 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的帮助。