diff options
author | E.Z. Hart <hartez@users.noreply.github.com> | 2016-05-10 11:15:47 -0600 |
---|---|---|
committer | Jason Smith <jason.smith@xamarin.com> | 2016-05-10 10:15:47 -0700 |
commit | 5acafedb8e3e2ace8e66f9ff20655d5d96e8ed97 (patch) | |
tree | c816ea1127275953bcc458315e1714fd0cb17003 /Xamarin.Forms.Platform.Android/AppCompat/MasterDetailPageRenderer.cs | |
parent | d4a5bb8dfcb39949451fe0e5390a684f116cc288 (diff) | |
download | xamarin-forms-5acafedb8e3e2ace8e66f9ff20655d5d96e8ed97.tar.gz xamarin-forms-5acafedb8e3e2ace8e66f9ff20655d5d96e8ed97.tar.bz2 xamarin-forms-5acafedb8e3e2ace8e66f9ff20655d5d96e8ed97.zip |
[Android] Isolate fragment management for children of MasterDetailPage (#136)
* Isolate fragment management for children of MasterDetailPage in AppCompat
If a MasterDetailPage hosts NavigationPages or TabbedPages in either the
Master or Detail sections, wrap those pages in their own Fragment (and
ChildFragmentManager) to isolate their Fragment management operations and
avoid recursive entry into the executePendingTransactions method
Also fix a disposal bug in the custom MDP renderer in Control Gallery
* Remove MDP Split setting that breaks test on iPad
Diffstat (limited to 'Xamarin.Forms.Platform.Android/AppCompat/MasterDetailPageRenderer.cs')
-rw-r--r-- | Xamarin.Forms.Platform.Android/AppCompat/MasterDetailPageRenderer.cs | 21 |
1 files changed, 17 insertions, 4 deletions
diff --git a/Xamarin.Forms.Platform.Android/AppCompat/MasterDetailPageRenderer.cs b/Xamarin.Forms.Platform.Android/AppCompat/MasterDetailPageRenderer.cs index a180c135..0173f485 100644 --- a/Xamarin.Forms.Platform.Android/AppCompat/MasterDetailPageRenderer.cs +++ b/Xamarin.Forms.Platform.Android/AppCompat/MasterDetailPageRenderer.cs @@ -3,10 +3,11 @@ using System.ComponentModel; using System.Threading.Tasks; using Android.Support.V4.Widget; using Android.Views; +using Android.Support.V4.App; namespace Xamarin.Forms.Platform.Android.AppCompat { - public class MasterDetailPageRenderer : DrawerLayout, IVisualElementRenderer, DrawerLayout.IDrawerListener + public class MasterDetailPageRenderer : DrawerLayout, IVisualElementRenderer, DrawerLayout.IDrawerListener, IManageFragments { #region Statics @@ -17,12 +18,12 @@ namespace Xamarin.Forms.Platform.Android.AppCompat int _currentLockMode = -1; MasterDetailContainer _detailLayout; - + MasterDetailContainer _masterLayout; bool _disposed; bool _isPresentingFromCore; - MasterDetailContainer _masterLayout; bool _presented; VisualElementTracker _tracker; + FragmentManager _fragmentManager; public MasterDetailPageRenderer() : base(Forms.Context) { @@ -68,6 +69,12 @@ namespace Xamarin.Forms.Platform.Android.AppCompat UpdateIsPresented(); } + void IManageFragments.SetFragmentManager(FragmentManager fragmentManager) + { + if (_fragmentManager == null) + _fragmentManager = fragmentManager; + } + VisualElement IVisualElementRenderer.Element => Element; event EventHandler<VisualElementChangedEventArgs> IVisualElementRenderer.ElementChanged @@ -114,6 +121,12 @@ namespace Xamarin.Forms.Platform.Android.AppCompat LayoutParameters = new LayoutParams(ViewGroup.LayoutParams.WrapContent, ViewGroup.LayoutParams.WrapContent) { Gravity = (int)GravityFlags.Start } }; + if (_fragmentManager != null) + { + _detailLayout.SetFragmentManager(_fragmentManager); + _masterLayout.SetFragmentManager(_fragmentManager); + } + AddView(_detailLayout); AddView(_masterLayout); @@ -329,7 +342,7 @@ namespace Xamarin.Forms.Platform.Android.AppCompat void UpdateMaster() { - MasterDetailContainer masterContainer = _masterLayout; + Android.MasterDetailContainer masterContainer = _masterLayout; if (masterContainer == null) return; |