0

我在表格视图中有一个国家列表(大约 100 行)。如果我以缓慢的速度滚动浏览它,一切正常,并且加载了正确的图像。如果我尽可能快地滚动浏览,那么一些国家的标志就会混淆。这似乎是 ImageLoader 中的一个错误,但我觉得奇怪的是没有其他人遇到过它?我正在使用这里的最新代码: https ://github.com/migueldeicaza/MonoTouch.Dialog/blob/master/MonoTouch.Dialog/Utilities/ImageLoader.cs

如果我将 ImageLoader.cs 中的“MaxRequests”更改为更大的值,例如 30,一切似乎都可以正常工作。如果我将其更改为 3,则所有内容的加载速度都会非常缓慢,并且会显示很多错误的国家/地区标志。

我使用这个类的方式有问题吗?我尝试像这里一样采用子类方式: https ://github.com/xamarin/mobile-samples/blob/master/MWC/MWC.iOS/UI/CustomElements/SpeakerCell.cs

但我遇到了完全相同的问题。缓慢滚动时工作正常,快速滚动时会感到困惑。

我像这样加载图像:

private System.Collections.Generic.Dictionary<string, List<NSIndexPath>> listOfImageUrls = new System.Collections.Generic.Dictionary<string, List<NSIndexPath>>();

public void UpdatedImage (Uri uri)
{
    InvokeOnMainThread (() => ReloadImage(uri));
}

public void ReloadImage(Uri uri){
    String id = uri.ToString();
    if(!listOfImageUrls.ContainsKey(id))
        return;
    List<NSIndexPath> indexes = listOfImageUrls[id];
   _tvc.GetTableView().ReloadRows(indexes.ToArray(), UITableViewRowAnimation.None);
}

public override UITableViewCell GetCell(UITableView tableView, NSIndexPath indexPath)
{
 ...
   UIImageView imgLogo = ...; 
   string imageUri = getCountryFlagUrlSmall (dataSourceItemCountry);
   imgLogo.Image = MonoTouch.Dialog.Utilities.ImageLoader.DefaultRequestImage (new Uri (imageUri), this);           

   if(listOfImageUrls.ContainsKey(imageUri))
   {
      if(!listOfImageUrls[imageUri].Contains(indexPath))
        listOfImageUrls[imageUri].Add(indexPath);                       
   }
   else
    listOfImageUrls.Add(imageUri, new List<NSIndexPath>{indexPath});
   } 
...
4

1 回答 1

0

我改用这个: https ://github.com/sichy/UrlImageStore/blob/master/MonoTouch.UrlImageStore/UrlImageStore.cs

只需要 4-5 行代码来更改实现并且一切都正确加载。

于 2012-10-05T11:46:51.720 回答