add support for view cells
authorAdrian Knight <adrianknight89@outlook.com>
Sun, 27 Nov 2016 20:17:24 +0000 (14:17 -0600)
committerRui Marinho <me@ruimarinho.net>
Wed, 22 Feb 2017 11:30:19 +0000 (11:30 +0000)
Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Bugzilla47923.cs
Xamarin.Forms.Platform.Android/Cells/BaseCellView.cs
Xamarin.Forms.Platform.Android/Renderers/ImageRenderer.cs

index 2e21ba6..23a6d73 100644 (file)
@@ -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<int>();
+                       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;
                }
index c4d10cc..b14a585 100644 (file)
@@ -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<IImageSourceHandler>(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
index a50c181..fe91d58 100644 (file)
@@ -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)
+                       ImageSource source = Element.Source;
+                       Bitmap bitmap = null;
+                       IImageSourceHandler handler;
+
+                       if (source != null && (handler = Registrar.Registered.GetHandler<IImageSourceHandler>(source.GetType())) != null)
                        {
-                               IImageSourceHandler handler;
-                               if ((handler = Registrar.Registered.GetHandler<IImageSourceHandler>(source.GetType())) != null)
+                               try
                                {
-                                       try
-                                       {
-                                               bitmap = await handler.LoadImageAsync(source, Context);
-                                       }
-                                       catch (TaskCanceledException)
-                                       {
-                                       }
-                                       catch (IOException ex)
-                                       {
-                                               Log.Warning("Xamarin.Forms.Platform.Android.ImageRenderer", "Error updating bitmap: {0}", ex);
-                                       }
+                                       bitmap = await handler.LoadImageAsync(source, Context);
                                }
-
-                               if (bitmap == null && source is FileImageSource)
+                               catch (TaskCanceledException)
                                {
-                                       Control.SetImageResource(ResourceManager.GetDrawableByName(((FileImageSource)Element.Source).File));
+                               }
+                               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();