Xml for the Grid layout.
<GridView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/myGrid"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:padding="2dip"
android:verticalSpacing="10dp"
android:horizontalSpacing="10dp"
android:numColumns="auto_fit"
android:columnWidth="148dp"
android:stretchMode="spacingWidthUniform"
android:gravity="center"
/>
</RelativeLayout>
imagenselect.xml for Image and checkbox.
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/GridItem"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
android:gravity="center_horizontal"
android:background="#000080">
<ImageView
android:id="@+id/grid_item_image"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
</ImageView>
<CheckBox
android:id="@+id/check1"
android:layout_width="wrap_content"
android:layout_height="wrap_content" android:text="Android" />
</LinearLayout>
Class for adding the images in gridview and displaying,
private class ImageAdapter extends BaseAdapter {
private Context context;
public ImageAdapter(Context localcontext){
context = localcontext;
}
public int getCount() {
return cursor.getCount();
}
public Object getItem(int position) {
return position;
}
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub\
View MyView = convertView;
ImageView picturesView;
picturesView = new ImageView(context);
if (convertView == null) {
LayoutInflater li = getLayoutInflater();
MyView = li.inflate(R.layout.imagenselect, null);
// Move cursor to current position
cursor.moveToPosition(position);
// Get the current value for the requested column
int imageID = cursor.getInt(columnIndex);
// Set the content of the image based on the provided URI
picturesView.setImageURI(Uri.withAppendedPath(
MediaStore.Images.Thumbnails.EXTERNAL_CONTENT_URI, "" + imageID));
picturesView.setScaleType(ImageView.ScaleType.FIT_CENTER);
picturesView.setPadding(8, 8, 8, 8);
picturesView.setLayoutParams(new GridView.LayoutParams(100, 100));
}
else {
picturesView = (ImageView) convertView;
}
return picturesView;
}
}
}
Here with this code , I get only the images in gridview. But i want to inflate the view and use it such that i’m able to add a checkbox along with the image. (for each image a checkbox).
Since there are two views in the function “myView” and “picturesView”. If i try to typecast the picturesView to myView then i’m getting a crash. Thanks in advance !
on changing as u suggested im getting a crash.
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub\
View myView = convertView;
if (convertView == null) {
LayoutInflater li = getLayoutInflater();
myView = li.inflate(R.layout.imagenselect, null);
}
ImageView picturesView;
picturesView = new ImageView(context);
picturesView = (ImageView) myView.findViewById( R.id.grid_item_image);
// Move cursor to current position
cursor.moveToPosition(position);
// Get the current value for the requested column
int imageID = cursor.getInt(columnIndex);
// Set the content of the image based on the provided URI
picturesView.setImageURI(Uri.withAppendedPath(
MediaStore.Images.Thumbnails.EXTERNAL_CONTENT_URI, "" + imageID));
picturesView.setScaleType(ImageView.ScaleType.FIT_CENTER);
picturesView.setPadding(8, 8, 8, 8);
picturesView.setLayoutParams(new GridView.LayoutParams(100, 100));
return myView;
}
Your code actually looks really confused to me. Your code always returns an
ImageViewobject, and never theMyViewview that you inflate from your layout which contains your check box. That would explain why your check box is not appearing.I think that you need something along the lines of: