在我的应用程序中,我会显示一些信息,并根据值更改textView的颜色。
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中,我将颜色设置为红色,只在需要时才更改。
答案 0 :(得分:1)
如果percentV < 41
,您没有明确设置颜色。这意味着该项目将保留以前视图的任何颜色,从而产生不可预测的结果。
这是因为出于性能原因,每个项目的View
可能会被重复使用。如果您从屏幕顶部滚动一个项目,则可以将相同的View
用于显示在屏幕底部的新项目,以节省每次膨胀新项目的成本。您必须在bindView()
中明确设置默认颜色,否则View
将保留其包含的最后一个项目的颜色。
答案 1 :(得分:0)
您必须检查百分比是否为&lt;比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);
}