1

長いリストビューを取得しました。特定のセルの色を変更しようとしました。たとえば、位置 == 0 です。正常に動作します。しかし、リストを下にスクロールすると、前に画面の外に出ていた別のセルも変化します。何か案が?助けてくれてありがとう

public class CheckWinNoAdapter extends ArrayAdapter<String> {
private final Context context;
private String[] values;
TextView tvMain;




public CheckWinNoAdapter(Context context, String[] values) {
    // TODO Auto-generated constructor stub
    super(context, R.layout.list_draw, values);
    this.context = context;
    this.values = values;

}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    if (convertView == null) {
        LayoutInflater inflater = (LayoutInflater) context
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);

        convertView = inflater.inflate(R.layout.list_draw, parent, false);
    }

    tvMain = (TextView) convertView.findViewById(R.id.chk_main);
    tvMain.setText(values[position]);



    if(position ==0){
        tvMain.setTextColor(Color.BLUE);
    }

    return convertView;
4

2 に答える 2

2

を再利用してビューをリサイクルしています。次のようconvertViewに、常に色を設定する必要がありますgetView()

if (position == 0) {
    tvMain.setTextColor(Color.BLUE);
} else {
    // set color back to original color
    tvMain.setTextColor(Color.BLACK);
}

http://lucasr.org/2012/04/05/performance-tips-for-androids-listview/を参照してください。

于 2012-07-22T07:29:52.520 に答える
0

わかりました、私は今、私が使用する if (convertView == null) {} の代わりに、自分で理解します

@Override
public View getView(int position, View convertView, ViewGroup parent) {



    LayoutInflater inflater = (LayoutInflater) context
            .getSystemService(Context.LAYOUT_INFLATER_SERVICE);

        View rowView = inflater.inflate(R.layout.list_draw, parent, false);
        TextView tvMain = (TextView) rowView.findViewById(R.id.chk_main);
return rowView;

ビューのリサイクルではなく、rowView だけです。

于 2012-07-22T08:02:54.447 に答える