Definindo checkbox dinamicamente a partir do sqlite em um fragmento

Estou tendo problemas para descobrir a melhor maneira de armazenar e exibir caixas de seleção em um listview.

Agora eu tenho o código no 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;
        }

O db helper pega um objeto photo como argumento e atualiza a linha se ela existir. Então, agora eu atualizo o objeto de foto atualisHidden() Para ser verdadeiro ou falso, passe o objeto atualizado para o db helper.

O banco de dados físico parece estar sendo atualizado corretamente. No entanto, um problema ocorre quando o estado das caixas de seleção está sendo definido. As caixas de seleção parecem estar configuradas aleatoriamente como marcadas ou desmarcadas.

Também sinto que fazer isso no getView é cpu ganancioso, mas não tenho certeza de como fazer isso.

questionAnswers(4)

yourAnswerToTheQuestion