我从sqlite获取数据(imagepaths
),因此我使用simplecursoradapter
在gridview
中显示图片。在每个gridview项中,它包含一个imageview和一个复选框,如下面的代码所示。这里我的第一个问题是图像似乎在每当滚动网格视图时改变它们的位置并在一段时间之后在它们自己的位置结算,这看起来很奇怪。我认为这些问题是由于视图在滚动时重复使用而引起的。
第二个问题是,当检查并滚动了少量checkboxes
时,复选框的值会发生变化,即,如果我选中了几个图像视图的复选框并向下滚动以选择更多,则会检查另一个checkboxes
。有人可以帮我解决这个问题吗?
public class ImagesScreen extends Activity{
public void onCreate(Bundle savedInstanceState){
.......................
.......................
gridView.setAdapter(imagecursorAdapter);
}
}
适配器类:
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;
}
}