In meiner App zeige ich einige Informationen und je nach Wert ändere ich die Farbe der TextView.CursorAdapter seltsames Verhalten
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"));
}
}
Das Problem ist, nachdem ich rauf und runter scrollen die Farben beginnen durcheinander zu kommen, aber die Werte bleiben gleich.
Irgendwelche Ratschläge?
Edit: Im XML-Format habe ich die Farbe auf rot eingestellt und nur bei Bedarf geändert.
ich die Farbe in xml auf rot gesetzt und nur bei Bedarf geändert werden. –
Sie können das nicht tun. Ansichten in einer ListView werden wiederverwendet. Wenn Sie am oberen Bildschirmrand einen Bildlauf durchführen, wird aus Performancegründen die gleiche Ansicht für den neuen Eintrag am unteren Bildschirmrand verwendet. Sie müssen die Standardfarbe in 'bindView()' explizit festlegen. –
Oh, ich habe vergessen, dass Ansichten wiederverwendet werden, es funktioniert jetzt. Vielen Dank. –