私のアプリではいくつかの情報を表示し、値に応じてtextViewの色を変更します。CursorAdapter strange behavior
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で色を赤に設定し、必要に応じて変更します。
41以上であるかどうかを確認する必要があります。 –
できません。 ListViewのビューは再利用されます。画面上部の1つの項目をスクロールすると、パフォーマンス上の理由から、画面の下部に表示される新しい項目に同じビューが使用されます。 'bindView()'にデフォルトの色を明示的に設定する必要があります。 –
ああ、私はビューが再利用されていることを忘れていました。ありがとうございました。 –