Configuración de casilla de verificación dinámicamente desde sqlite en un fragmento

Tengo problemas para encontrar la mejor manera de almacenar y mostrar las casillas de verificación en una vista de lista.

Ahora mismo tengo el código en el método getView:

@Override
        public View getView(final int position, View convertView, ViewGroup parent) {
            View view = convertView;
            //final ViewHolder holder;
            if (convertView == null) {
                convertView = getActivity().getLayoutInflater().inflate(R.layout.grid_item, null);
            }
            ImageView img = (ImageView) convertView.findViewById(R.id.grid_item_img);

            cb = (CheckBox) convertView.findViewById(R.id.chk_box_griditem);


            if(photos.get(position).getIshidden()){
                cb.setChecked(false);
            }else{
                cb.setChecked(true);
            }


            cb.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
                @Override
                public void onCheckedChanged(CompoundButton buttonView,
                        boolean isChecked) {
                    MySQLiteHelper db = MySQLiteHelper.getInstance(getActivity());
                    Log.d("checkbox", "status: " + photos.get(position).getIshidden());

                    if (isChecked) {
                        photos.get(position).setIshidden(true);
                        cb.setChecked(true);
                        Log.d("checkbox", "isChecked");
                        db.updatePhoto(photos.get(position));

                    } else {
                        photos.get(position).setIshidden(false);
                        cb.setChecked(false);
                        Log.d("checkbox", "isCheckedelse");
                        db.updatePhoto(photos.get(position));
                    }

                }
            });

            imageLoader.displayImage(imgUrls[position], img, options, animateFirstListener);

            //img.setImageResource(mImgRes);
            return convertView;
        }

El ayudante de db toma un objeto de foto como argumento y actualiza la fila si existe. Así que ahora mismo actualizo el objeto de foto actualisHidden() para ser verdadero o falso, entonces pase el objeto actualizado a db helper.

La base de datos física parece estar actualizando correctamente. Sin embargo, se produce un problema cuando se establece el estado de las casillas de verificación. Las casillas de verificación parecen estar configuradas aleatoriamente como marcadas o no marcadas.

También tengo ganas de hacer esto en el getView es cpu codicioso, pero no estoy seguro de cómo hacerlo.

Respuestas a la pregunta(4)

Su respuesta a la pregunta