1

次のコードスニップを使用する前に、クリックした画像ビューにチェックマークを付け、クリックした画像ビューのチェックを外したい。最後にチェックした位置をmDeviceAdapterに保存します。古い位置のチェックを外そうとすると、部分的に表示されている画像ビューであっても、画像ビューは常にnullになります。目に見えないものだけがリサイクルされると思ったので、私は本当に混乱しています...Androidの初心者とコメントをいただければ幸いです。

    public void CheckableImageView#setChecked(boolean checked) {
    if (mChecked != checked) {
        mChecked = checked;
        invalidate();
    }
}

    mDeviceGallery.setOnItemClickListener(new AdapterView.OnItemClickListener() {

                @Override
                public void onItemClick(AdapterView<?> parent, View view,
                        int position, long id) {

                    CheckableImageView viewToCheck = (CheckableImageView) view;
                    if (!viewToCheck.isChecked()) {
                        int oldCheckedPosition = mDeviceAdapter
                                .getCheckedPosition();
                        mDeviceAdapter.setCheckedPosition(position);
                        View checkedView = mDeviceGallery
                                .getChildAt(oldCheckedPosition);
                        Log.d(TAG, "old position="+oldCheckedPosition + "old view="+checkedView);
                        if (checkedView != null) {
                            ((CheckableImageView) checkedView)
                                    .setChecked(false);
                            Log.d(TAG, "uncheck position="
                                    + oldCheckedPosition);
                        }
                        viewToCheck.setChecked(true);
4

1 に答える 1

0

それは正しいアプローチではありません。データ型にブールフィールド(つまり、mIsChecked)を追加する必要があります。メソッドで、その変数の値をtrueに設定し、onItemClickそのINDEXをアダプターのメンバーとして保持します。別のアイテムがクリックされたら、そのアイテムの値をtrueに設定し、保存されたアイテムの値をfalseに設定します(ArrayList前のクリックで保存したINDEXのデータ型の値を変更します)。

ここで、getView()メソッドにはif/elseステートメントが必要です。何かのようなもの:

if (item.isChecked())
{
    checkedView.setChecked(true);
}
else
{
    checkedView.setChecked(false);
}

メソッドの例onClick:(一般的な方向)

if (item.isChecked())
    {
        checkedView.setChecked(false);
        yourList.get(position).setChecked(true);
        yourList.get(mLastCheckedIndex).setChecked(false);
        mLastCheckedIndex = position;
        notifyDataSetChanged();
    }
    else
    {
        //same but opposite.
    }

お役に立てれば!

于 2012-10-02T16:50:03.190 に答える