summaryrefslogtreecommitdiff
path: root/Xamarin.Forms.Platform.Android/Platform.cs
diff options
context:
space:
mode:
authorE.Z. Hart <hartez@users.noreply.github.com>2017-04-13 09:11:50 -0600
committerRui Marinho <me@ruimarinho.net>2017-04-13 16:11:50 +0100
commitaa1811126570b7d5e10c0473bad3b0dd0fb858eb (patch)
tree5128450f920dc05e3dcd9fe42dba076444193f09 /Xamarin.Forms.Platform.Android/Platform.cs
parenta0affaafbd6d6721a5501384777959c7384d7ddb (diff)
downloadxamarin-forms-aa1811126570b7d5e10c0473bad3b0dd0fb858eb.tar.gz
xamarin-forms-aa1811126570b7d5e10c0473bad3b0dd0fb858eb.tar.bz2
xamarin-forms-aa1811126570b7d5e10c0473bad3b0dd0fb858eb.zip
Verify FragmentContainer created when queueing fragment transaction (Android) (#865)
* Add check for disposed MasterDetailContainer when queueing fragment transaction * Fix various ObjectDisposedExceptions when setting main page * Add check for legacy renderers when querying control properties
Diffstat (limited to 'Xamarin.Forms.Platform.Android/Platform.cs')
-rw-r--r--Xamarin.Forms.Platform.Android/Platform.cs19
1 files changed, 17 insertions, 2 deletions
diff --git a/Xamarin.Forms.Platform.Android/Platform.cs b/Xamarin.Forms.Platform.Android/Platform.cs
index 72a6d0c9..e2326d48 100644
--- a/Xamarin.Forms.Platform.Android/Platform.cs
+++ b/Xamarin.Forms.Platform.Android/Platform.cs
@@ -9,6 +9,7 @@ using Android.Content;
using Android.Content.Res;
using Android.Graphics;
using Android.Graphics.Drawables;
+using Android.OS;
using Android.Support.V4.App;
using Android.Util;
using Android.Views;
@@ -390,12 +391,14 @@ namespace Xamarin.Forms.Platform.Android
internal void SetPage(Page newRoot)
{
var layout = false;
+ List<IVisualElementRenderer> toDispose = null;
+
if (Page != null)
{
_renderer.RemoveAllViews();
- foreach (IVisualElementRenderer rootRenderer in _navModel.Roots.Select(GetRenderer))
- rootRenderer.Dispose();
+ toDispose = _navModel.Roots.Select(Android.Platform.GetRenderer).ToList();
+
_navModel = new NavigationModel();
layout = true;
@@ -415,6 +418,18 @@ namespace Xamarin.Forms.Platform.Android
_toolbarTracker.Target = newRoot;
UpdateActionBar();
+
+ if (toDispose?.Count > 0)
+ {
+ // Queue up disposal of the previous renderers after the current layout updates have finished
+ new Handler(Looper.MainLooper).Post(() =>
+ {
+ foreach (IVisualElementRenderer rootRenderer in toDispose)
+ {
+ rootRenderer.Dispose();
+ }
+ });
+ }
}
internal static void SetPageContext(BindableObject bindable, Context context)