[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