summaryrefslogtreecommitdiff
path: root/Xamarin.Forms.Platform.Android/Renderers
diff options
context:
space:
mode:
authorE.Z. Hart <hartez@users.noreply.github.com>2016-05-10 11:15:47 -0600
committerJason Smith <jason.smith@xamarin.com>2016-05-10 10:15:47 -0700
commit5acafedb8e3e2ace8e66f9ff20655d5d96e8ed97 (patch)
treec816ea1127275953bcc458315e1714fd0cb17003 /Xamarin.Forms.Platform.Android/Renderers
parentd4a5bb8dfcb39949451fe0e5390a684f116cc288 (diff)
downloadxamarin-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/Renderers')
-rw-r--r--Xamarin.Forms.Platform.Android/Renderers/MasterDetailContainer.cs35
1 files changed, 21 insertions, 14 deletions
diff --git a/Xamarin.Forms.Platform.Android/Renderers/MasterDetailContainer.cs b/Xamarin.Forms.Platform.Android/Renderers/MasterDetailContainer.cs
index c23eb7c7..9184e269 100644
--- a/Xamarin.Forms.Platform.Android/Renderers/MasterDetailContainer.cs
+++ b/Xamarin.Forms.Platform.Android/Renderers/MasterDetailContainer.cs
@@ -1,8 +1,10 @@
using System;
+using Android.App;
using Android.Content;
using Android.Content.Res;
using Android.Runtime;
using Android.Views;
+using Android.Widget;
namespace Xamarin.Forms.Platform.Android
{
@@ -40,19 +42,24 @@ namespace Xamarin.Forms.Platform.Android
if (_childView == null)
return;
+
+ AddChildView(_childView);
+ }
+ }
- IVisualElementRenderer renderer = Platform.GetRenderer(_childView);
- if (renderer == null)
- Platform.SetRenderer(_childView, renderer = Platform.CreateRenderer(_childView));
-
- if (renderer.ViewGroup.Parent != this)
- {
- if (renderer.ViewGroup.Parent != null)
- renderer.ViewGroup.RemoveFromParent();
- SetDefaultBackgroundColor(renderer);
- AddView(renderer.ViewGroup);
- renderer.UpdateLayout();
- }
+ protected virtual void AddChildView(VisualElement childView)
+ {
+ IVisualElementRenderer renderer = Platform.GetRenderer(childView);
+ if (renderer == null)
+ Platform.SetRenderer(childView, renderer = Platform.CreateRenderer(childView));
+
+ if (renderer.ViewGroup.Parent != this)
+ {
+ if (renderer.ViewGroup.Parent != null)
+ renderer.ViewGroup.RemoveFromParent();
+ SetDefaultBackgroundColor(renderer);
+ AddView(renderer.ViewGroup);
+ renderer.UpdateLayout();
}
}
@@ -97,7 +104,7 @@ namespace Xamarin.Forms.Platform.Android
MasterDetailPageController.DetailBounds = bounds;
IVisualElementRenderer renderer = Platform.GetRenderer(_childView);
- renderer.UpdateLayout();
+ renderer?.UpdateLayout();
}
void DisposeChildRenderers()
@@ -132,7 +139,7 @@ namespace Xamarin.Forms.Platform.Android
return new Rectangle(xPos, padding, width, height - padding);
}
- void SetDefaultBackgroundColor(IVisualElementRenderer renderer)
+ protected void SetDefaultBackgroundColor(IVisualElementRenderer renderer)
{
if (ChildView.BackgroundColor == Color.Default)
{