protected virtual void SwitchFragment(FragmentManager manager, AView targetView, ShellItem newItem, bool animate = true) { var previousView = _currentView; _currentView = CreateShellItemRenderer(newItem); _currentView.ShellItem = newItem; var fragment = _currentView.Fragment; FragmentTransaction transaction = manager.BeginTransactionEx(); if (animate) { transaction.SetTransitionEx((int)global::Android.App.FragmentTransit.FragmentOpen); } transaction.ReplaceEx(_frameLayout.Id, fragment); // Don't force the commit if this is our first load if (previousView == null) { transaction .SetReorderingAllowedEx(true); } transaction.CommitAllowingStateLossEx(); void OnDestroyed(object sender, EventArgs args) { previousView.Destroyed -= OnDestroyed; previousView.Dispose(); previousView = null; } if (previousView != null) { previousView.Destroyed += OnDestroyed; } }