summaryrefslogtreecommitdiff
path: root/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Bugzilla42329.cs
diff options
context:
space:
mode:
authorE.Z. Hart <hartez@users.noreply.github.com>2016-08-02 14:57:08 -0600
committerJason Smith <jason.smith@xamarin.com>2016-08-02 13:57:08 -0700
commit3f88aebe22aaa0f8765648f15f1649c1a5ba2da4 (patch)
tree3d54cdb4a57137ff89cd3e4adcea37c023c9b98d /Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Bugzilla42329.cs
parent34048b7bb4e8bf55c712ffd92303cf260c491c0e (diff)
downloadxamarin-forms-3f88aebe22aaa0f8765648f15f1649c1a5ba2da4.tar.gz
xamarin-forms-3f88aebe22aaa0f8765648f15f1649c1a5ba2da4.tar.bz2
xamarin-forms-3f88aebe22aaa0f8765648f15f1649c1a5ba2da4.zip
Dispose of child renderers in FrameRenderer (#265)
* Dispose of child renderers in FrameRenderer * Add missing null check
Diffstat (limited to 'Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Bugzilla42329.cs')
-rw-r--r--Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Bugzilla42329.cs149
1 files changed, 149 insertions, 0 deletions
diff --git a/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Bugzilla42329.cs b/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Bugzilla42329.cs
new file mode 100644
index 00000000..16cd3081
--- /dev/null
+++ b/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Bugzilla42329.cs
@@ -0,0 +1,149 @@
+using System;
+using System.Collections.Generic;
+using System.Diagnostics;
+using Xamarin.Forms.Controls.Issues;
+using Xamarin.Forms.CustomAttributes;
+using Xamarin.Forms.Internals;
+
+#if UITEST
+using Xamarin.UITest;
+using NUnit.Framework;
+#endif
+
+namespace Xamarin.Forms.Controls
+{
+ [Preserve (AllMembers = true)]
+ [Issue (IssueTracker.Bugzilla, 42329, "ListView in Frame and FormsAppCompatActivity Memory Leak")]
+ public class Bugzilla42329 : TestMasterDetailPage
+ {
+ const string DestructorMessage = "ContentPageEx Destructor called";
+ const string Page1Title = "Page1";
+ const string Page2Title = "Page2";
+ const string Page3Title = "Page3";
+
+ protected override void Init ()
+ {
+ var masterPage = new MasterPage();
+ Master = masterPage;
+ masterPage.ListView.ItemSelected += (sender, e) =>
+ {
+ var item = e.SelectedItem as MasterPageItem;
+ if (item != null)
+ {
+ Detail = new NavigationPage((Page)Activator.CreateInstance(item.TargetType));
+ masterPage.ListView.SelectedItem = null;
+ IsPresented = false;
+ }
+ };
+
+ Detail = new NavigationPage(new _42329_FrameWithListView());
+ }
+
+ [Preserve(AllMembers = true)]
+ public class MasterPage : ContentPage
+ {
+ public MasterPage()
+ {
+ Title = "Menu";
+ ListView = new ListView { VerticalOptions = LayoutOptions.FillAndExpand, SeparatorVisibility = SeparatorVisibility.None };
+
+ ListView.ItemTemplate = new DataTemplate(() =>
+ {
+ var ic = new ImageCell();
+ ic.SetBinding(TextCell.TextProperty, "Title");
+ return ic;
+ });
+
+ Content = new StackLayout
+ {
+ Children = { ListView }
+ };
+
+ var masterPageItems = new List<MasterPageItem>();
+ masterPageItems.Add(new MasterPageItem
+ {
+ Title = Page1Title,
+ TargetType = typeof(Bugzilla42329._42329_FrameWithListView)
+ });
+ masterPageItems.Add(new MasterPageItem
+ {
+ Title = Page2Title,
+ TargetType = typeof(Bugzilla42329._42329_Page2)
+ });
+ masterPageItems.Add(new MasterPageItem
+ {
+ Title = Page3Title,
+ TargetType = typeof(Bugzilla42329._42329_Page3)
+ });
+
+ ListView.ItemsSource = masterPageItems;
+ }
+
+ public ListView ListView { get; }
+ }
+
+ [Preserve(AllMembers = true)]
+ public class MasterPageItem
+ {
+ public string IconSource { get; set; }
+
+ public Type TargetType { get; set; }
+
+ public string Title { get; set; }
+ }
+
+ [Preserve(AllMembers = true)]
+ public class ContentPageEx : ContentPage
+ {
+ ~ContentPageEx()
+ {
+ Log.Warning("Bugzilla42329", DestructorMessage);
+ }
+ }
+
+ [Preserve(AllMembers = true)]
+ public class _42329_FrameWithListView : ContentPageEx
+ {
+ public _42329_FrameWithListView()
+ {
+ var lv = new ListView();
+ var label = new Label();
+ var frame = new Frame { Content = lv };
+
+ Title = Page1Title;
+ Content = new StackLayout
+ {
+ Children = { new Label { Text = "Open the drawer menu and select Page2" }, frame }
+ };
+ }
+ }
+
+ [Preserve(AllMembers = true)]
+ public class _42329_Page2 : ContentPage
+ {
+ public _42329_Page2()
+ {
+ Title = Page2Title;
+ Content = new StackLayout { Children = { new Label { Text = "Open the drawer menu and select Page3" } } };
+ }
+ }
+
+ [Preserve(AllMembers = true)]
+ public class _42329_Page3 : ContentPage
+ {
+ public _42329_Page3()
+ {
+ Title = Page3Title;
+ Content = new StackLayout { Children = { new Label { Text = $"The console should have displayed the text '{DestructorMessage}' at least once. If not, this test has failed." } } };
+ }
+
+ protected override void OnAppearing()
+ {
+ base.OnAppearing();
+ GC.Collect();
+ GC.Collect();
+ GC.Collect();
+ }
+ }
+ }
+} \ No newline at end of file