我在表格视图中有一个国家列表(大约 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});
}
...