public override void OnSaveInstanceState(Bundle outState)
        {
            base.OnSaveInstanceState(outState);
            outState.PutInt(FRAGMENT_STACK_SIZE_KEY, this.Fragments.Count());

            for (int i = 0; i < this.Fragments.Count(); ++i)
            {
                this.ChildFragmentManager.PutFragment(
                    outState,
                    FragmentStackNavigationController.CreateFragmentKeyForIndex(i),
                    this.Fragments.ElementAt(i)
                    );
            }
        }
        public override void OnCreate(Bundle savedInstanceState)
        {
            base.OnCreate(savedInstanceState);

            if (savedInstanceState != null)
            {
                var fragmentCount = savedInstanceState.GetInt(FRAGMENT_STACK_SIZE_KEY);
                for (int i = 0; i < fragmentCount; ++i)
                {
                    var fragment = this.ChildFragmentManager.GetFragment(
                        savedInstanceState,
                        FragmentStackNavigationController.CreateFragmentKeyForIndex(i)
                        );

                    this.fragmentsStack.Push(fragment);
                }
            }
        }
        public static FragmentStackNavigationController Create(
            int pushEnterAnimation,
            int pushExitAnimation,
            int popEnterAnimation,
            int popExitAnimation)
        {
            var args = new Bundle();

            args.PutInt(PUSH_ENTER_ANIM_KEY, pushEnterAnimation);
            args.PutInt(PUSH_EXIT_ANIM_KEY, pushExitAnimation);
            args.PutInt(POP_ENTER_ANIM_KEY, popEnterAnimation);
            args.PutInt(POP_EXIT_ANIM_KEY, popExitAnimation);

            var fragment = new FragmentStackNavigationController();

            fragment.Arguments = args;

            return(fragment);
        }