0

I am trying to display multiple images in Grid, but somehow in adapter position always stay 0. It never incremented. I am storing and fetching images using WebService.

Output : Always displaying repeat images. E.g if I am storing 7 images , it is showing first image 7 times due to position 0. Please take a look at output with image as well.

(Image)Visual Output

PhotoGalleryAdapter.cs :

public class PhotoGalleryAdapter : BaseAdapter<bitmapImagesList>
{

 Activity context;
 List<bitmapImagesList> lstBitmapImages;
 public PhotoGalleryAdapter(Activity context, List<bitmapImagesList> lstBitmapImages) : base()
 {
    this.context = context;
    this.lstBitmapImages = lstBitmapImages;
 }

 public override bitmapImagesList this[int position]
 {
    get { return lstBitmapImages[position]; }
 }

 public override long GetItemId(int position)
 {
    return position;
 }

 public override int Count {
    get { return lstBitmapImages.Count; } //thumbIds.Length
 }

 public override View GetView(int position, View convertView, ViewGroup parent)
 {
    var bitmapImage = lstBitmapImages[position].bitmapImage;
    ImageView imageView;

    if (convertView == null)
    {
        imageView = new ImageView(context);
        // Set Parameters for Images
        imageView.LayoutParameters = new GridView.LayoutParams(300, 300);
        imageView.SetScaleType(ImageView.ScaleType.FitXy);
        imageView.SetPadding(10, 10, 10, 10);
    }
    else
    {
        imageView = (ImageView)convertView;
    } 
    imageView.SetImageBitmap(bitmapImage);
    return imageView;
}

}

PhotoGallery.cs :

public void uploadImagesGrid() 

{

        var gridPhotoGallery = FindViewById<GridView>(Resource.Id.gridPhotoGallery);
        lstBitmapImagesClass = new List<bitmapImagesList>();
        foreach (var imageData in lstByteArryImages)
        {                
            var bmp = new bitmapImagesList
            {
                bitmapImage = BitmapFactory.DecodeByteArray(imageData, 0, imageData.Length)
            };
            lstBitmapImagesClass.Add(bmp);

        }
        gridPhotoGallery.Adapter = new PhotoGalleryAdapter(this, lstBitmapImagesClass);
        gridPhotoGallery.ItemClick += delegate(object sender, AdapterView.ItemClickEventArgs args)
        {
            Toast.MakeText(this, args.Position.ToString(), ToastLength.Short).Show();
        };
}

Thanks in Advance!

1 Answers1

0

Your code looks good. May be the problem comes from your layout. Can you add your axml layout that contains your gridview.

Same problems in native android : Position index always return 0 in getView

TGuerin
  • 345
  • 3
  • 18
  • 1
    I have resolved this issue. Actually my C#code and axml layout were working properly. The problem was in DB side where I always returning first row in 'for loop' , I have resolved using below code : byte[] photo = (byte[])dt.Rows[i]["FileData"]; – PrishahCoder Jul 14 '17 at 16:45