Ejemplo n.º 1
0
        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;
            }
        }