2017-01-27 92 views
0

我設置一個ArrayAdapter這樣的:設置一個TextView文字顏色改變全的ListView項目顏色

@NonNull 
@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    View view = convertView; 
    if(view == null){ 
     LayoutInflater layoutInflater = LayoutInflater.from(getContext()); 
     view = layoutInflater.inflate(R.layout.row_product_item, null); 
    } 

    TextView txtProductName = (TextView)view.findViewById(R.id.txt_product_name); 
    TextView txtProductRemaining = (TextView)view.findViewById(R.id.txt_product_remaining); 
    TextView txtProductPrice = (TextView)view.findViewById(R.id.txt_product_sale_price); 

    String productName = getItem(position).productName; 
    String productRemaining = Number.floatToStringAsNumber(getItem(position).productRemaining); 
    String productPrice = Number.floatToStringAsPrice(getItem(position).productSellPrice, true); 

    txtProductName.setText(productName); 
    txtProductRemaining.setText(productRemaining); 
    txtProductPrice.setText(productPrice); 

    /** 
    * Coloring 
    */ 
    if (getItem(position).productRemaining <= 0){ 
     txtProductRemaining.setTextColor(Color.parseColor("#ff7f7f")); 
    } 

    return view; 

} 

只要在最後一行的評價返回true,它描繪每一個txtProductRemaining。我只需要繪製評估項目。爲什麼它繪製了整套元素?

+0

ü確保您若條件? –

+0

是的。作爲@ A.A。被修改的,每當它發生變化時,整個適配器將永久設置。所以我必須添加'其他'條件 – chntgomez

回答

4

ListView重複使用視圖,因此一旦一個項目被着色,其他視圖也會在着色時着色。下面是你需要做的,以避免什麼:

if (getItem(position).productRemaining <= 0){ 
    txtProductRemaining.setTextColor(Color.parseColor("#ff7f7f")); 
} 
else { 
    txtProductRemaining.setTextColor(Color.BLACK));. // Or whatever default color you prefer 
} 

參考:https://developer.android.com/reference/android/widget/ArrayAdapter.html#getView(int,android.view.View,android.view.ViewGroup)

+0

謝謝。這個解決方案的工作 – chntgomez

+0

@chntgomez你會接受它作爲答案嗎? –

+0

只要最短的時間過去了 – chntgomez