Beispiel #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);
            transaction.CommitAllowingStateLossEx();

            void OnDestroyed(object sender, EventArgs args)
            {
                previousView.Destroyed -= OnDestroyed;

                previousView.Dispose();
                previousView = null;
            }

            if (previousView != null)
            {
                previousView.Destroyed += OnDestroyed;
            }
        }
        protected override void Dispose(bool disposing)
        {
            if (_disposed)
            {
                return;
            }

            if (disposing)
            {
                _disposed = true;

                _page = null;

                if (!_fragmentManager.IsDestroyed)
                {
                    FragmentTransaction transaction = _fragmentManager.BeginTransactionEx();

                    foreach (Fragment fragment in _fragments)
                    {
                        transaction.RemoveEx(fragment);
                        transaction.SetTransitionEx((int)FragmentTransit.None);
                    }

                    transaction.CommitAllowingStateLossEx();

                    _fragmentManager.ExecutePendingTransactionsEx();

                    _fragments       = null;
                    _fragmentManager = null;
                }
            }

            base.Dispose(disposing);
        }
Beispiel #3
0
        protected virtual void SwitchFragment(FragmentManager manager, AView targetView, ShellItem newItem, bool animate = true)
        {
            Profile.FrameBegin();

            Profile.FramePartition("IsDesignerContext");
            if (AndroidContext.IsDesignerContext())
            {
                return;
            }

            Profile.FramePartition("CreateShellItemRenderer");
            var previousRenderer = _currentRenderer;

            _currentRenderer           = CreateShellItemRenderer(newItem);
            _currentRenderer.ShellItem = newItem;
            var fragment = _currentRenderer.Fragment;

            Profile.FramePartition("Transaction");
            FragmentTransaction transaction = manager.BeginTransactionEx();

            if (animate)
            {
                transaction.SetTransitionEx((int)global::Android.App.FragmentTransit.EnterMask);
            }

            transaction.ReplaceEx(_frameLayout.Id, fragment);
            transaction.CommitAllowingStateLossEx();

            Profile.FramePartition("OnDestroyed");
            void OnDestroyed(object sender, EventArgs args)
            {
                previousRenderer.Destroyed -= OnDestroyed;

                previousRenderer.Dispose();
                previousRenderer = null;
            }

            if (previousRenderer != null)
            {
                previousRenderer.Destroyed += OnDestroyed;
            }

            Profile.FrameEnd();
        }