テーブルビュー(約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});
}
...