0

在我的应用程序中,我显示了一些信息,并根据值更改 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 中,我将颜色设置为红色,仅在需要时更改。

4

2 回答 2

1

您没有明确设置颜色 if percentV < 41。这意味着该项目将保留该视图之前的任何颜色,从而产生不可预测的结果。

这是因为出于性能原因,每个项目View都可能被重复使用。如果您从屏幕顶部滚动一个项目,则View可以将相同的项目用于出现在屏幕底部的新项目,以节省每次膨胀一个新项目的成本。您必须在 中明确设置默认颜色bindView(),否则View将保留它包含的最后一个项目的任何颜色。

于 2012-04-03T15:43:35.507 回答
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);
}
于 2012-04-03T15:44:31.793 回答