0

異なるインスタンスが最終的に最新の位置を指すようcursorになるため、各行に参照が渡される理由を説明できますか。渡されたメソッドが、このオブジェクトが渡される瞬間に実際に指している場所であるとmDBHelper.updateFavorites()予想しているためですが、そうではありません。どうもありがとうございました。cursoronClick()Cursor c

@Override
        public View newView(Context ctxt, Cursor c, ViewGroup parent) {
            View row;
            final Cursor cursor = c; // This is different for each row in list view
            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); // Here I'm expecting to have the cursor pointing exactly where Cursor c (which is passed to newView() method) is pointing right now.
                    } else {
                        mDbHelper.updateFavorite(cursor, 0); // The same here
                    }
                }
            });

            ViewHolder holder = new ViewHolder(row);

            row.setTag(holder);

            return (row);
        }
4

1 に答える 1

0

ご覧のとおり、カーソルのコピーを作成していません。つまり、実際には、それはただ 1 つのカーソルへの参照にすぎません。

したがって、ループでそれを割り当てている場合、ネット位置への初期参照を毎回移動すると、すべてのカーソルも移動します。

それはあなたの場合に起こりますか?

幸運を

于 2012-09-03T16:13:33.733 に答える