Установка свойств TextView в ListView - странный результат - PullRequest
1 голос
/ 20 мая 2010

У меня есть действие с ListView, которое заполняется через пользовательский ArrayAdapter. Существует массив объектов, которые имеют логическое свойство, называемое isRead. Основываясь на значении этого свойства, я хочу установить шрифт одного из TextViews в строке на «нормальный» или «жирный». Я также установил цвет текста «серый» или «черный»

Когда активность запускается изначально, все работает как положено. Если 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 Ответ

1 голос
/ 04 июня 2010

Я смог заставить это работать со следующим измененным фрагментом кода:

       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 за помощь в этом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...