2012-04-03 28 views
0

在我的應用程序中,我顯示一些信息並根據值更改textView的顏色。CursorAdapter奇怪的行爲

public class DealsAdapter extends CursorAdapter { 
    private Cursor mCursor; 
    private Context mContext; 
    private final LayoutInflater mInflater; 

    public DealsAdapter(Context context, Cursor cursor) { 
     super(context, cursor, true); 
     mInflater = LayoutInflater.from(context); 
     mContext = context; 
    } 

    @Override 
    public View newView(Context context, Cursor cursor, ViewGroup parent) { 
     final View view = mInflater.inflate(R.layout.deals_row, parent, false); 
     return view; 
    } 

    @Override 
    public void bindView(View row, Context context, Cursor cursor) { 
     Text View percent = (TextView) row.findViewById(R.id.tvPercent); 
      percent.setText(cursor.getString(cursor 
       .getColumnIndex(DBHelper.D_PERCENT))); 
      float percentV = cursor.getFloat(cursor 
       .getColumnIndex(DBHelper.D_PERCENT)); 
      if (percentV >= 41 && percentV <= 70) { 
      // Orange 
      percent.setTextColor(Color.parseColor("#F58549")); 
     } else if (percentV >= 71) { 
      // Green 
      percent.setTextColor(Color.parseColor("#17D11D")); 
     } 
} 

的問題是在我上下滾動的顏色開始變得混淆但值保持不變。

有什麼建議嗎?

編輯:在xml中,我將顏色設置爲紅色,只在需要時更改。

回答

1

如果percentV < 41沒有明確設置顏色。這意味着該項目將保留以前的任何顏色,從而給出不可預知的結果。

這是因爲每個項目的View可能因性能原因而被重新使用。如果您從屏幕頂部滾動一個項目,則屏幕底部出現的新項目可能會使用相同的View,以節省每次膨脹新項目的成本。您必須明確地設置bindView()中的默認顏色,否則View將保留其包含的最後一個項目的任何顏色。

+0

我在XML中的顏色設置爲紅色,只需要更改。 – 2012-04-03 15:44:33

+0

你不能那樣做。 ListView中的視圖被重用。出於性能原因,如果您滾動屏幕頂部的一個項目,則會在屏幕底部出現的新項目使用相同的視圖。你必須在'bindView()'中明確地設置默認顏色。 – 2012-04-03 15:46:11

+0

哦,我忘了視圖被重用,現在它的工作。謝謝。 – 2012-04-03 15:49:12

0

你必須檢查percentV是<超過41

if (percentV >= 41 && percentV <= 70) { 
    // Orange 
    percent.setTextColor(Color.parseColor("#F58549")); 
} else if (percentV >= 71) { 
    // Green 
    percent.setTextColor(Color.parseColor("#17D11D")); 
} else { 
    // DEFAULT color (if percentV < 41) 
    percent.setTextColor(DEFAULT COLOR); 
}