diff --git a/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Bugzilla47923.cs b/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Bugzilla47923.cs index 2e21ba6f7..23a6d73ac 100644 --- a/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Bugzilla47923.cs +++ b/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Bugzilla47923.cs @@ -1,4 +1,5 @@ -using Xamarin.Forms.CustomAttributes; +using System.Collections.Generic; +using Xamarin.Forms.CustomAttributes; using Xamarin.Forms.Internals; #if UITEST @@ -59,6 +60,24 @@ namespace Xamarin.Forms.Controls.Issues } } + public class CellViewPage : ContentPage + { + public CellViewPage() + { + var list = new List(); + for (var i = 0; i < 50; i++) + list.Add(i); + + var listView = new ListView + { + ItemsSource = list, + ItemTemplate = new DataTemplate(() => new ImageCell { ImageSource = "cartman" }) + }; + + Content = listView; + } + } + public class LandingPage : ContentPage { public LandingPage() @@ -96,6 +115,14 @@ namespace Xamarin.Forms.Controls.Issues }; stackLayout.Children.Add(button3); + var button4 = new Button + { + Text = "Test cell views", + Command = new Command(() => { Navigation.PushAsync(new CellViewPage()); }), + HorizontalOptions = LayoutOptions.Center + }; + stackLayout.Children.Add(button4); + scrollView.Content = stackLayout; Content = scrollView; } diff --git a/Xamarin.Forms.Platform.Android/Cells/BaseCellView.cs b/Xamarin.Forms.Platform.Android/Cells/BaseCellView.cs index c4d10cc4b..b14a585a3 100644 --- a/Xamarin.Forms.Platform.Android/Cells/BaseCellView.cs +++ b/Xamarin.Forms.Platform.Android/Cells/BaseCellView.cs @@ -193,7 +193,6 @@ namespace Xamarin.Forms.Platform.Android _imageView.SetImageResource(global::Android.Resource.Color.Transparent); Bitmap bitmap = null; - IImageSourceHandler handler; if (source != null && (handler = Registrar.Registered.GetHandler(source.GetType())) != null) @@ -211,9 +210,12 @@ namespace Xamarin.Forms.Platform.Android } } - _imageView.SetImageBitmap(bitmap); - if (bitmap != null) - bitmap.Dispose(); + if (bitmap == null && source is FileImageSource) + _imageView.SetImageResource(ResourceManager.GetDrawableByName(((FileImageSource)source).File)); + else + _imageView.SetImageBitmap(bitmap); + + bitmap?.Dispose(); } } } \ No newline at end of file diff --git a/Xamarin.Forms.Platform.Android/Renderers/ImageRenderer.cs b/Xamarin.Forms.Platform.Android/Renderers/ImageRenderer.cs index a50c1814f..fe91d588e 100644 --- a/Xamarin.Forms.Platform.Android/Renderers/ImageRenderer.cs +++ b/Xamarin.Forms.Platform.Android/Renderers/ImageRenderer.cs @@ -68,10 +68,6 @@ namespace Xamarin.Forms.Platform.Android if (Device.IsInvokeRequired) throw new InvalidOperationException("Image Bitmap must not be updated from background thread"); - Bitmap bitmap = null; - - ImageSource source = Element.Source; - if (previous != null && Equals(previous.Source, Element.Source)) return; @@ -82,27 +78,22 @@ namespace Xamarin.Forms.Platform.Android Control.SetImageResource(global::Android.Resource.Color.Transparent); - if (source != null) - { - IImageSourceHandler handler; - if ((handler = Registrar.Registered.GetHandler(source.GetType())) != null) - { - try - { - bitmap = await handler.LoadImageAsync(source, Context); - } - catch (TaskCanceledException) - { - } - catch (IOException ex) - { - Log.Warning("Xamarin.Forms.Platform.Android.ImageRenderer", "Error updating bitmap: {0}", ex); - } - } + ImageSource source = Element.Source; + Bitmap bitmap = null; + IImageSourceHandler handler; - if (bitmap == null && source is FileImageSource) + if (source != null && (handler = Registrar.Registered.GetHandler(source.GetType())) != null) + { + try { - Control.SetImageResource(ResourceManager.GetDrawableByName(((FileImageSource)Element.Source).File)); + bitmap = await handler.LoadImageAsync(source, Context); + } + catch (TaskCanceledException) + { + } + catch (IOException ex) + { + Log.Warning("Xamarin.Forms.Platform.Android.ImageRenderer", "Error updating bitmap: {0}", ex); } } @@ -114,7 +105,9 @@ namespace Xamarin.Forms.Platform.Android if (!_isDisposed) { - if (bitmap != null) + if (bitmap == null && source is FileImageSource) + Control.SetImageResource(ResourceManager.GetDrawableByName(((FileImageSource)source).File)); + else Control.SetImageBitmap(bitmap); bitmap?.Dispose();