2012-07-17 11 views
1

我在自定義列表視圖中獲得了文字視圖,我知道如何設置文本顏色,以便列表中的所有文字視圖都將被更改。但是現在,我只想要一個特定的視圖改變顏色,比如在listview中有10個項目,我只想要改變第二個textview顏色,其餘的都保持不變。任何想法?非常感謝所有幫助〜如何設置列表視圖中的單個文本視圖的文本顏色,而不是所有的每個文本視圖?

public class CheckWinNoAdapter extends ArrayAdapter<String> { 
private final Context context; 
private String[] values; 



public CheckWinNoAdapter(Context context, String[] values) { 
    // TODO Auto-generated constructor stub 
    super(context, R.layout.list_draw, values); 
    this.context = context; 
    this.values = values; 

} 

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    LayoutInflater inflater = (LayoutInflater) context 
     .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

    View rowView = inflater.inflate(R.layout.list_draw, parent, false); 
    TextView textView1 = (TextView) rowView.findViewById(R.id.chk_tv1); 


    textView1.setText(values[position]); 




} 

}

+0

而不是傳遞列表視圖的位置通整數值來你試圖設置文本的顏色 – AkashG 2012-07-17 07:54:40

回答

3

在獲取視圖像這樣做:

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
LayoutInflater inflater = (LayoutInflater) context 
    .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

View rowView = inflater.inflate(R.layout.list_draw, parent, false); 
TextView textView1 = (TextView) rowView.findViewById(R.id.chk_tv1); 


textView1.setText(values[position]); 

if(Your Condition Goes Here){ 
textView.setTextColor(Color.RED); // Did you tried this??? 
} 

} 
6

ListView回收,以便其意見,以避免內存浪費。因此,每次調用getView時,都要新建一個View,然後將其分配給以前的參數convertView,然後重新使用它。 convertView是您推遲滾動的視圖。因此,如果推送滾動的TextView與具有不同顏色的文本視圖相同,您可以在文本視圖中看到「yourcolor」,其中顯示了defaultcolor。所以這裏需要設置每次getView被稱爲文本顏色。

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 


    if (converView == null) { 
      LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      converView = inflater.inflate(R.layout.list_draw, parent, false); 
    } 

    TextView textView1 = (TextView) converView.findViewById(R.id.chk_tv1); 

    int color = (position == YOUR_POSITION) ? yourcolor : defaultcolor; 
    textView1.setTextColor(color); 

    textView1.setText(values[position]); 

} 
+0

這很好,如果你給描述也.. – user370305 2012-07-17 07:57:16

+0

ListView回收視圖,以避免泄漏。因此,每次調用getView時都不要膨脹一個新的View,而應將其分配給以前的參數convertView,然後重新使用它。 – Blackbelt 2012-07-17 08:01:56

+0

我談到了在你的答案中加入描述,所以對OP的理解有幫助。無論如何,從我+1。 – user370305 2012-07-17 08:07:10

4

你可以改變你的getView到這個。

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    LayoutInflater inflater = (LayoutInflater) context 
     .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

    View rowView = inflater.inflate(R.layout.list_draw, parent, false); 
    TextView textView1 = (TextView) rowView.findViewById(R.id.chk_tv1); 

    if(position== 2){ 
     textView1.setColor(Color.White);//or whatever you like 
    } 
    textView1.setText(values[position]); 




} 

}

1

不是傳遞列表視圖的位置通整數值,其烏爾嘗試設置文本的顏色爲:

if (position == INT_VALUE)//where INT_VALUE=the position at which u want to setcolor of yours 
    textView.setTextColor(color);//which color u want to set 
else 
    textView.setTextColor(defaultcolor);//to remaining texts 
相關問題