2010-05-20 58 views
0

我有一個ListView活動,通過自定義的ArrayAdapter進行填充。有一個對象的數組具有名爲'isRead'的布爾屬性。根據此屬性的值,我想將該行中某個TextView的字體設置爲「普通」或「粗體」。我還將文本的顏色設置爲「灰色」或「黑色」在ListView中設置TextView屬性 - 奇怪的結果

當「活動」最初啓動時,所有內容都按預期工作。如果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

你在哪裏調用setRead()?你還可以發佈這部分代碼嗎?重要的是要提到,如果你滾動,視圖再次繪製。 – RoflcoptrException 2010-05-20 14:45:50

+1

除了Sebi說的話,我想可能是因爲你在上下滾動時重複使用視圖對象。但是,我看不出有什麼明顯的問題,你正在做什麼... – 2010-05-20 17:41:25

+0

我得到的結果證明是閱讀設置正確。文本顏色是灰色或黑色,具體取決於isRead屬性的狀態。但是,字體在第一次繪製時爲NORMAL,如果在視圖之外滾動並返回到視圖中,字體爲BOLD。文字顏色保持一致。 – deSelby 2010-05-21 20:28:12

回答

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爲在這一個幫助。