更新时间:2023-10-19 19:14:46
您code实际上看起来真的很困惑我。您code 总是返回的ImageView
对象,从不 MyView的
观点从您的布局,其中包含您的复选框膨胀。这可以解释为什么你的复选框没有出现。
我认为你需要的线沿线的东西:
@覆盖
公共查看getView(INT位置,查看convertView,父母的ViewGroup){
查看MyView的= convertView
如果(MyView的== NULL)
{
LayoutInflater李= getLayoutInflater();
MyView的= li.inflate(R.layout.imagenselect,NULL);
}
ImageView的pictureView =(ImageView的)myView.findViewById(R.id.grid_item_image);
//初始化pictureView在这里。
返回MyView的;
}
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).
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 ImageView
object, and never the MyView
view 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:
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View myView = convertView
if( myView == null )
{
LayoutInflater li = getLayoutInflater();
myView = li.inflate(R.layout.imagenselect, null);
}
ImageView pictureView = (ImageView) myView.findViewById( R.id.grid_item_image );
// initialise pictureView here.
return myView;
}