0

画像とチェックボックスを備えたカスタムグリッドビューを使用しているアプリに取り組んでいます。画像とチェックボックスを含むグリッドビューの表示はうまく機能しています。しかし、ここで私の問題は、グリッドビューをスクロールすると1つのチェックボックスがチェックされた後、別のチェックボックスがチェックされ、もう一度下にスクロールすると表示されます。ここでは、チェックボックスのチェック状態が維持されていました。私のアダプタクラスコードは..

MyGrid.java

public class ImageAdapter extends BaseAdapter {
    private LayoutInflater mInflater;

    public ImageAdapter() {
        mInflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    }

    public int getCount() {
        return count;
    }

    public Object getItem(int position) {
        return position;
    }

    public long getItemId(int position) {
        return position;
    }

    public View getView(int position, View convertView, ViewGroup parent) {
        final ViewHolder holder;
        if (convertView == null) {
            holder = new ViewHolder();
            convertView = mInflater.inflate(R.layout.galleryitem, null);
            holder.imageview = (ImageView) convertView.findViewById(R.id.thumbImage);
            holder.checkbox = (CheckBox) convertView.findViewById(R.id.itemCheckBox);
            holder.textview = (TextView) convertView.findViewById(R.id.saved_image_name);

            Drawable background = holder.textview.getBackground();
            background.setAlpha(150);
            convertView.setTag(holder);
        } else {
            holder = (ViewHolder) convertView.getTag();
        }

        holder.checkbox.setId(position);
        holder.imageview.setId(position);
        holder.textview.setId(position);

        holder.checkbox.setOnCheckedChangeListener(new OnCheckedChangeListener() {

            @Override
            public void onCheckedChanged(CompoundButton arg0, boolean arg1) {
                // TODO Auto-generated method stub
                CheckBox cb = (CheckBox) holder.checkbox;

                int id = cb.getId();

                if (thumbnailsselection[id]) {
                    cb.setChecked(false);
                    thumbnailsselection[id] = false;
                    selected_images.remove(String.valueOf(id));
                } else {
                    cb.setChecked(true);
                    thumbnailsselection[id] = true;
                    if (selected_images.contains(String.valueOf(id))) {

                    }else{
                        selected_images.add(String.valueOf(id));
                    }
                }
            }
        });

        holder.imageview.setOnClickListener(new OnClickListener() {

            public void onClick(View v) {
                // TODO Auto-generated method stub
                int id = v.getId();
                Intent intent = new Intent();
                intent.setAction(Intent.ACTION_VIEW);
                intent.setDataAndType(Uri.parse("file://" + arrPath[id]),
                "image/*");
                startActivity(intent);
            }
        });
        if (arrPath[position] == null || arrPath[position].equals(null)) {

        }else{
        image_name=extractString(arrPath[position]);
        String[] splited_name = image_name.split("\\.");

        for (int i = 0; i < selected_images.size(); i++) {
            if (selected_images.get(i).equals(String.valueOf(position)) || selected_images.get(i) == String.valueOf(position)) {
                holder.checkbox.setChecked(true);
            }
        }

        holder.textview.setText(splited_name[0]);
        holder.imageview.setImageBitmap(thumbnails[position]);
        holder.checkbox.setChecked(thumbnailsselection[position]);
        holder.id = position;

        holder.imageview.setScaleType(ImageView.ScaleType.FIT_XY);
        }
        return convertView;
    }
}

class ViewHolder {
    ImageView imageview;
    CheckBox checkbox,checkbox1;
    TextView textview;
    int id;
}

チェックボックス(選択されたチェックボックス)の永続状態を維持する方法を誰かが助けてくれますか。

4

2 に答える 2