2017-04-03 80 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

我沒有檢查它。我想。所以我會在第一次做你的建議 –