0

newView()ofがどのように機能するかについて少し混乱していますCursorAdapterCursor c特にフレームワークによってメソッドに渡されるものに興味があります。4行を含むaListViewで満たされた aがあります。CursorAdapterデバッギングを行った後、2 つの異なるCursor cオブジェクトが に渡されていることがわかりnewView()、この事実に混乱しています。

私は、データベース内のオブジェクトごとにCursor異なるオブジェクトがメソッドに渡されることを期待していました。したがって、この仮定を念頭に置いて、リストビュー行のチェックボックス要素に onClick リスナーを設定していましたが、これは非常に奇妙に機能します。Cursorrow

  @Override
        public View newView(Context ctxt, Cursor c, ViewGroup parent) {
            View row;
            final Cursor cursor = c;
            LayoutInflater inflater = ((Activity) ctxt).getLayoutInflater();
            row = inflater.inflate(R.layout.row, parent, false);
            this.defaultDrawable = (Drawable) row.getBackground();
            final CheckBox mStar = (CheckBox) row.findViewById(R.id.star);
            mStar.setOnClickListener(new View.OnClickListener() {

                @Override
                public void onClick(View view) {
                    if (mStar.isChecked()) {
                        mDbHelper.updateFavorite(cursor, 1);
                    } else {
                        mDbHelper.updateFavorite(cursor, 0);
                    }
                }
            });

            ViewHolder holder = new ViewHolder(row);

            row.setTag(holder);

            return (row);
        }
4

1 に答える 1

0

カーソルは、ビューを作成した時点の場所へのポインターです。onClick メソッドでは、クエリの他の場所を指しています。

cursor.moveTo(); を呼び出して、必要な場所に移動できます。

CursorAdapter の場合、通常、カーソルには _ID 列があり、この値は行を識別するために使用されます。

于 2012-09-03T15:32:09.497 に答える