Android gridview中imageview和复选框的特殊行为

Android gridview中imageview和复选框的特殊行为,android,checkbox,imageview,simplecursoradapter,Android,Checkbox,Imageview,Simplecursoradapter,我从sqlite获取DataImagePath,所以我使用simplecursoradapter在gridview中显示图像。在每个gridview项中,它都包含一个imageview和一个复选框,如下面的代码所示。这里我的第一个问题是,每当gridview被滚动时,图像似乎会改变它们的位置,并在一段时间后固定在它们自己的位置上,这看起来很奇怪。我认为这些问题是由于视图在滚动时被重用而造成的 第二个问题是,当选中并滚动几个复选框时,复选框值会更改,即,如果我选中ImageView的几个复选框并向

我从sqlite获取DataImagePath,所以我使用simplecursoradapter在gridview中显示图像。在每个gridview项中,它都包含一个imageview和一个复选框,如下面的代码所示。这里我的第一个问题是,每当gridview被滚动时,图像似乎会改变它们的位置,并在一段时间后固定在它们自己的位置上,这看起来很奇怪。我认为这些问题是由于视图在滚动时被重用而造成的

第二个问题是,当选中并滚动几个复选框时,复选框值会更改,即,如果我选中ImageView的几个复选框并向下滚动以选择更多,则会选中其他复选框。有人能帮我避免这个问题吗

public class ImagesScreen extends Activity{

    public void onCreate(Bundle savedInstanceState){
       .......................

       .......................
          gridView.setAdapter(imagecursorAdapter);

    }

    }
适配器类:


请注意:还有@DhavalSodhaParmar是的。这里您使用了holder.checkbox.setCheckedthumbnailsselection[位置];以确保没有复选框混乱。但是在我的例子中,我需要在哪里添加代码,因为我使用的是SimpleCrsorAdapter?请建议。
public class ImageCursorAdapter extends SimpleCursorAdapter{

        private int layout;
        private LayoutInflater mLayoutInflater;
        private Context mContext;
        ViewHolder vh;

        public ImageAdapter(Context context, int layout, Cursor c,String[] from, int[] to)  {
            super(context, layout, c, from, to,0);
            this.layout = layout;
            mLayoutInflater=LayoutInflater.from(context);
            mContext = context;
        }

        public View newView(Context context, Cursor cursor, ViewGroup parent) {     
            View v = mLayoutInflater.inflate(layout, parent, false);
            return v;
        }

        public void bindView(final View v, final Context context, Cursor c) {
            final int id = c.getInt(c.getColumnIndex("id"));
            final String imagepath = c.getString(c.getColumnIndex("paths"));
            vh = new ViewHolder();

            vh.imageview = (ImageView)v.findViewById(R.id.imageView1);
            vh.checkBox = (CheckBox)v.findViewById(R.id.checkBox1);

            vh.checkBox.setOnCheckedChangeListener(new OnCheckedChangeListener(){
     public void onCheckedChanged(CompoundButton buttonView, boolean isChecked){
       Log.d("ischecked",""+isChecked);                             
                }

            });
            File imgFile = new File(imagepath);
            if(imgFile.exists()){

                Bitmap imageBitmap = decodeFile(imgFile);
                vh.imageview.setImageBitmap(imageBitmap);
            }

        }

     static class ViewHolder{

            public ViewHolder(){}

            public ImageView imageview;
            public CheckBox checkBox;
        }
}