diff options
author | E.Z. Hart <hartez@users.noreply.github.com> | 2016-10-04 11:47:02 -0600 |
---|---|---|
committer | Rui Marinho <me@ruimarinho.net> | 2016-10-04 19:52:40 +0100 |
commit | 9f4cad6a620ddde3e2a28c88d3621c865c651a25 (patch) | |
tree | 38cbf84159ea54184fb2c74fe263ee879b28a671 /Xamarin.Forms.Platform.Android | |
parent | 111905ccdcd3d330f869658c0dc887f1e3d58751 (diff) | |
download | xamarin-forms-9f4cad6a620ddde3e2a28c88d3621c865c651a25.tar.gz xamarin-forms-9f4cad6a620ddde3e2a28c88d3621c865c651a25.tar.bz2 xamarin-forms-9f4cad6a620ddde3e2a28c88d3621c865c651a25.zip |
Unhook drawer listeners so MDP renderer and pages can be collected (#412)
Null out page in custom MDP renderer in Control Gallery so it can be collected
Checkpoint
Checkpoint
Checkpoint
Checkpoint
Checkpoint
Checkpoint
Diffstat (limited to 'Xamarin.Forms.Platform.Android')
3 files changed, 39 insertions, 1 deletions
diff --git a/Xamarin.Forms.Platform.Android/AppCompat/MasterDetailContainer.cs b/Xamarin.Forms.Platform.Android/AppCompat/MasterDetailContainer.cs index 102bac53..1b85b42f 100644 --- a/Xamarin.Forms.Platform.Android/AppCompat/MasterDetailContainer.cs +++ b/Xamarin.Forms.Platform.Android/AppCompat/MasterDetailContainer.cs @@ -11,8 +11,9 @@ namespace Xamarin.Forms.Platform.Android.AppCompat PageContainer _pageContainer; FragmentManager _fragmentManager; readonly bool _isMaster; - readonly MasterDetailPage _parent; + MasterDetailPage _parent; Fragment _currentFragment; + bool _disposed; public MasterDetailContainer(MasterDetailPage parent, bool isMaster, Context context) : base(parent, isMaster, context) { @@ -106,6 +107,37 @@ namespace Xamarin.Forms.Platform.Android.AppCompat } } + protected override void Dispose(bool disposing) + { + if (_disposed) + { + return; + } + + _disposed = true; + + if (disposing) + { + if (_currentFragment != null) + { + FragmentTransaction transaction = FragmentManager.BeginTransaction(); + transaction.DisallowAddToBackStack(); + transaction.Remove(_currentFragment); + transaction.SetTransition((int)FragmentTransit.None); + transaction.CommitAllowingStateLoss(); + FragmentManager.ExecutePendingTransactions(); + + _currentFragment = null; + } + + _parent = null; + _pageContainer = null; + _fragmentManager = null; + } + + base.Dispose(disposing); + } + public void SetFragmentManager(FragmentManager fragmentManager) { if (_fragmentManager == null) diff --git a/Xamarin.Forms.Platform.Android/AppCompat/MasterDetailPageRenderer.cs b/Xamarin.Forms.Platform.Android/AppCompat/MasterDetailPageRenderer.cs index 6740285c..ccf01f22 100644 --- a/Xamarin.Forms.Platform.Android/AppCompat/MasterDetailPageRenderer.cs +++ b/Xamarin.Forms.Platform.Android/AppCompat/MasterDetailPageRenderer.cs @@ -188,24 +188,29 @@ namespace Xamarin.Forms.Platform.Android.AppCompat if (_detailLayout != null) { + RemoveView(_detailLayout); _detailLayout.Dispose(); _detailLayout = null; } if (_masterLayout != null) { + RemoveView(_masterLayout); _masterLayout.Dispose(); _masterLayout = null; } Device.Info.PropertyChanged -= DeviceInfoPropertyChanged; + RemoveDrawerListener(this); + if (Element != null) { MasterDetailPageController.BackButtonPressed -= OnBackButtonPressed; Element.PropertyChanged -= HandlePropertyChanged; Element.Appearing -= MasterDetailPageAppearing; Element.Disappearing -= MasterDetailPageDisappearing; + Element.ClearValue(Android.Platform.RendererProperty); Element = null; } diff --git a/Xamarin.Forms.Platform.Android/AppCompat/NavigationPageRenderer.cs b/Xamarin.Forms.Platform.Android/AppCompat/NavigationPageRenderer.cs index b2b9108a..3de0c8bc 100644 --- a/Xamarin.Forms.Platform.Android/AppCompat/NavigationPageRenderer.cs +++ b/Xamarin.Forms.Platform.Android/AppCompat/NavigationPageRenderer.cs @@ -170,6 +170,7 @@ namespace Xamarin.Forms.Platform.Android.AppCompat if (_drawerLayout != null && _drawerListener != null) { _drawerLayout.RemoveDrawerListener(_drawerListener); + _drawerListener = null; } _drawerToggle = null; |