0

この Android のビューのリサイクルはかなり正気ではありません。

これは私のコードであり、動作していません

public class CustomCursorAdapter extends SimpleCursorAdapter {

    private Context currentContext;
    private Cursor mCursor;
    private boolean[] rows;

    public CustomCursorAdapter(Context context, int layout, Cursor c,
            String[] from, int[] to) {
        super(context, layout, c, from, to);
        // TODO Auto-generated constructor stub
        currentContext = context;
        mCursor = c;
        populateRows();
    }

    private void populateRows() {
        rows = new boolean[mCursor.getCount()];
        int i = 0;
        while (mCursor.moveToNext()) {
            rows[i] = false;
            i++;            
        }

    }

    @Override
    public View getView(int position, View v, ViewGroup parent) {
        // convertView.setBackgroundColor(R.drawable.darkred);
        if (v != null) {
            //getting checkbox
            CheckBox cb = (CheckBox) v.findViewById(R.id.name);

            if(rows[position]){
                rows[position] = false;
            }else{
                rows[position] = true;
            }
            cb.setChecked(rows[position]);

        }

        return super.getView(position, v, parent);
    }

}

どんな助けでも大歓迎です。

4

1 に答える 1

0

ここで多くのことが間違っています:

  • getView で状態を変更しないでください。行[位置]の反転について言及します。getView は、同じリスト行を描画するために何度も呼び出すことができます。補足として、 a = !a; を使用して反転できます。
  • if on v != null からチェック済み状態を設定します。ビューをリサイクルする場合、別のデータ行の状態で設定される可能性があるため、UI を初期化する必要があります。
  • ビューが null ではなく、再利用する場合は、それを返します
  • ビューが null の場合は、レイアウトを拡張するなどして、新しいインスタンスを作成する必要があります
于 2012-04-24T16:45:38.070 に答える