J'utilise Xamarin Forms et Xamarin Android.

J'ai ce code pour lire certains fichiers (stockés dans un téléphone Android)

public ImageSource Photo { get; set; }

public void LoadPhoto()
{
    var t = Android.Net.Uri.Parse("URI_OF_THE_PHOTO");
    var otherStream = Android.App.Application.Context.ContentResolver.OpenInputStream(t);
    Photo = Xamarin.Forms.ImageSource.FromStream(() => otherStream);
}

Puis, dans ma page XAML, dans ViewCell d'un ListView, j'ai ce contrôle Image:

<Image Source="{Binding Photo}"></Image>

Tout fonctionne parfaitement, les images (environ 50) sont chargées correctement et affichées dans le ListView.

MAIS quand je fais défiler la ListView et que les images sortent de l'écran, quand je les fais défiler en arrière, elles sont VIDE! Les images ont soudainement disparu ... DISPARUES !!!

J'ai trouvé quelques cas de StackOverflow similaires à celui-ci, mais je ne peux pas le faire fonctionner avec ces solutions, ils semblent ne pas s'appliquer à mon cas.

S'il vous plaît, aidez, je suis coincé avec ce problème!

2
Alessandro 23 mai 2018 à 11:21

3 réponses

Meilleure réponse

Vous pouvez lire ce lien. FFImageLoading résoudra votre problème.

1
Robbit 7 juin 2018 à 02:34

J'ai un problème similaire, et après Google pendant un certain temps, le problème est résolu (peut-être que cette réponse est trop tardive)

public ImageSource ByteToImageSource(byte[] byteArrayIn)
{
    //this way, image in ListView will disapear on scroll
    //var stream = new MemoryStream(byteArrayIn);
    //var retSource = ImageSource.FromStream(() => stream);

    // this way is fine
    var retSource = ImageSource.FromStream(() => new MemoryStream(byteArrayIn));
    return retSource;
}

Donc je pense que dans votre cas, vous pourriez faire comme ceci:

Photo = Xamarin.Forms.ImageSource.FromStream(() => Android.App.Application.Context.ContentResolver.OpenInputStream(t));
0
ChiaChi 8 avril 2020 à 07:13

Utiliser le stacklayout pouvant être lié dans les formulaires xamarin 3.5..i avait le même problème..résolu ..

1
Vipin Krishna 13 févr. 2019 à 13:53