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

の場合、明示的に色を設定していませんpercentV < 41。これは、アイテムが以前のビューの色を保持し、予測できない結果をもたらすことを意味します。

これはView、パフォーマンス上の理由から各アイテムが再利用される可能性があるためです。画面の上部から1つのアイテムをスクロールすると、View画面の下部に表示される新しいアイテムにも同じものを使用して、毎回新しいアイテムを膨らませるコストを節約できます。でデフォルトの色を明示的に設定する必要があります。bindView()そうしないViewと、最後に含まれていたアイテムの色が保持されます。

于 2012-04-03T15:43:35.507 に答える
0

パーセントVが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 に答える