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 に答える