【问题标题】:Xamarin.Android : Position doesn't increment in Adapter for showing multiple images in GridViewXamarin.Android:适配器中的位置不会增加以在 GridView 中显示多个图像
【发布时间】:2017-07-12 21:19:21
【问题描述】:

我试图在网格中显示多个图像,但不知何故在适配器位置始终保持 0。它从未增加。 我正在使用 WebService 存储和获取图像。

输出:始终显示重复图像。例如,如果我要存储 7 张图片,由于位置 0,它会显示第一张图片 7 次。请同时查看带有图片的输出。

(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();
        };
}

提前致谢!

【问题讨论】:

    标签: gridview xamarin.android


    【解决方案1】:

    您的代码看起来不错。可能问题来自您的布局。您可以添加包含您的 gridview 的 axml 布局吗?

    原生 android 中的相同问题: Position index always return 0 in getView

    【讨论】:

    • 我已经解决了这个问题。实际上我的 C#code 和 axml 布局工作正常。问题出在数据库端,我总是在“for循环”中返回第一行,我已经使用以下代码解决了: byte[] photo = (byte[])dt.Rows[i]["FileData"];
    猜你喜欢
    • 2015-03-03
    • 2014-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-25
    • 1970-01-01
    相关资源
    最近更新 更多