2017-04-03 82 views
0

我有一个RecyclerView,其中包含cardViews作为成员,并且cardviews包含图像视图,图像来自具有异步方法的urls。 它的工作原理,但是当我快速滚动几次它会导致未处理的错误。 我该做什么?RecyclerView中的几个滚动导致出现错误xamarin.android

public override async void OnBindViewHolder(RecyclerView.ViewHolder viewHolder, int position) 
    { 
     var item = items[position]; 

     var holder = viewHolder as MyViewHolder; 

     holder.image.SetImageBitmap(null); 

     holder.fname.Text = items[position].fname; 
     holder.sname.Text = items[position].sname; 
     holder.age.Text = items[position].age.ToString(); 
     holder.progressLayout.Visibility = ViewStates.Visible; 


     using (var imageBitmap = await GetImageBitmapFromUrl(items[position].imageURL)) 
     { 
      var width = imageBitmap.Width; 
      var height = imageBitmap.Height; 

      var max = Math.Max(width, height); 

      var scale = (double)holder.image.Width/max; 

      var scaled = Bitmap.CreateScaledBitmap(imageBitmap, (int)(width * scale), (int)(height * scale), false); 
      holder.image.SetImageBitmap(scaled); 
     } 

     holder.progressLayout.Visibility = ViewStates.Gone; 

    } 

    private async Task<Bitmap> GetImageBitmapFromUrl(string url) 
    { 
     Bitmap imageBitmap = null; 

     using (var webClient = new WebClient()) 
     { 
      var imageBytes = await webClient.DownloadDataTaskAsync(url); 
      if (imageBytes != null && imageBytes.Length > 0) 
      { 
       imageBitmap = await BitmapFactory.DecodeByteArrayAsync(imageBytes, 0, imageBytes.Length); 
      } 
     } 

     return imageBitmap; 
    } 

回答

0

解决, 我布置将其设置为ImageView的位图后,“缩放”变量

  var scaled = Bitmap.CreateScaledBitmap(imageBitmap, (int)(width * scale), (int)(height * scale), false); 
      holder.image.SetImageBitmap(scaled); 
      scaled.Dispose(); // here 
+0

我不认为你应该设置图像为空,在这里:holder.image.SetImageBitmap (空值); – Alexandre

+0

如果我没有将它设置为null,则在加载当前图像期间将显示先前视图thet已被回收的图像 –

+0

我没有检查它。我想。所以我会在第一次做你的建议 –