[xamarin]ListView捲動之後圖片消失的問題

  • 90
  • 0

[xamarin]ListView捲動之後圖片消失的問題

在listView裡面的image當資料筆數一多,並且在上下捲動之後,圖片就會消失成白色的

在.xaml裡面的ListView的image長這樣:

<Image Grid.RowSpan="5"
   Source="{Binding ImageThumbnail}"
   Aspect="AspectFill"
   HeightRequest="120"
   WidthRequest="120" />


在c#端設定資料來源ImageSource的時候,照下面這樣寫就可以了

public ImageSource ByteToImageSource(byte[] byteArrayIn)
{
    //這是原本有問題的寫法
    //var stream = new MemoryStream(byteArrayIn);
    //var retSource = ImageSource.FromStream(() => stream);

    //寫法改成這樣就OK了
    var retSource = ImageSource.FromStream(() => new MemoryStream(byteArrayIn));
    return retSource;
}

在網路上搜尋了很多相關資料,大部分網友說用FFImageLoading這個套件就可以解決了
不過我跟少部分的網友一樣,使用FFImageLoading並沒有解決我的問題
反而是改寫原本程式碼的寫法之後,問題才解決

我想原因大概是因為,ListView當資料一多且在捲動的時候,會去回收c#端已經執行完畢的二進位資料
因此在c#端轉型完畢的下面這段的stream變數,就會在ListView捲動的時候被清掉
所以ListView裡面的Image資料就會同時被清除了
var stream = new MemoryStream(byteArrayIn); var retSource = ImageSource.FromStream(() => stream);

而改成下面的寫法之後,LIstView裡面的Image資料將會是另外一份新的Copy,因此當ListView捲動的時候
就不會清除到畫面的圖片了
var retSource = ImageSource.FromStream(() => new MemoryStream(byteArrayIn));

希望能幫助到有需要的人
謝謝

參考資料:
Xamarin ListView Images disappears on Scroll
https://stackoverflow.com/questions/50483303/xamarin-listview-images-disappears-on-scroll