It should be very simple, I miss, but I have the following problem (the message is quite long, but I want to provide as much information as possible :)).
I have a gridview in my android application where each cell contains a custom view:
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <GridView android:id = "@+id/photosGridView" android:layout_width="fill_parent" android:layout_height="fill_parent" android:clickable="true" android:drawSelectorOnTop="true" android:focusable="true" android:focusableInTouchMode="true" android:numColumns="6" android:columnWidth="90dp" android:verticalSpacing="5dp" android:horizontalSpacing="5dp" android:stretchMode="columnWidth" > </GridView> </RelativeLayout>
and each cell
<?xml version="1.0" encoding="utf-8"?> <com.myapp.widgets.ImageThumbView xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background = "@android:color/transparent" android:paddingLeft = "1dip" android:paddingRight = "1dip" android:paddingTop = "2dip" android:paddingBottom = "2dip" > <ImageView android:id="@+id/thumbImage" android:layout_width="fill_parent" android:layout_height = "fill_parent" android:src="@drawable/icon_small" /> <RelativeLayout android:layout_width="fill_parent" android:layout_height = "fill_parent" android:background = "@android:color/transparent" > <ImageView android:id="@+id/iconRight" android:layout_width="40px" android:layout_height = "40px" android:src="@drawable/album_check" android:visibility="gone" android:layout_alignParentTop = "true" android:layout_alignParentRight = "true" /> <ImageView android:id="@+id/iconLeft" android:src="@drawable/album_check" android:visibility="gone" android:layout_width = "40px" android:layout_height="40px" android:layout_alignParentTop = "true" android:layout_alignParentLeft = "true" /> </RelativeLayout> </com.myapp.widgets.ImageThumbView>
My adapter looks like this:
public class ImageAdapter extends BaseAdapter { private List<String> mPictures = null; public ImageAdapter(List<String> pictures) { mPictures = pictures; } public int getCount() { return mPictures != null ? mPictures.size() : 0; } public Object getItem(int position) { return mPictures != null ? mPictures.get(position) : null; } public long getItemId(int position) { return mPictures != null ? position : -1; } @Override public View getView(int position,View convertView,ViewGroup parent) { ImageThumbView i = null; try { Thread.sleep(100); if (convertView == null) { String path = mPictures.get(position); Log.d(((Integer)position).toString(), path); i = addSingleView(_li, path); TextView idx = (TextView) i.findViewById(R.id.caption); if (idx != null) idx.setText(((Integer)position).toString()); } else { Log.d(((Integer)position).toString(), "ALREADY NOT NULL"); i = (ImageThumbView) convertView;
So, initially it works correctly, i.e. displays the first 18 images and a few pixels from the next line. But when I start scrolling the grid, the images begin to appear randomly, that is, after the last image, I see some from the very beginning and so on. Out of curiosity, I tried several examples like this: http://androidsamples.blogspot.com/2009/06/how-to-display-thumbnails-of-images.html ... and see the same result.
So am I doing something wrong? why on earth does a gridview display more items than it is supposed to? and why are the elements displayed in the wrong positions?
BR, Alex
alexey_gusev
source share