示例#1
0
        public override Object InstantiateItem(ViewGroup container, int position)
        {
            // If we already have this item instantiated, there is nothing
            // to do.  This can happen when we are restoring the entire pager
            // from its saved state, where the fragment manager has already
            // taken care of restoring the fragments we previously had instantiated.

            if (_fragments.Count > position)
            {
                var existingFragment = _fragments.ElementAtOrDefault(position);
                if (existingFragment != null)
                {
                    return(existingFragment);
                }
            }

            if (_curTransaction == null)
            {
                _curTransaction = _fragmentManager.BeginTransaction();
            }

            var fragmentTag = GetTag(position);

            Android.Support.V4.App.Fragment.SavedState fss = null;
            if (_savedState.Count > position)
            {
                var savedTag = _savedFragmentTags.ElementAtOrDefault(position);
                if (string.Equals(fragmentTag, savedTag))
                {
                    fss = _savedState.ElementAtOrDefault(position);
                }
            }

            var fragment = GetItem(position, fss);

            if (fss != null)
            {
                fragment.SetInitialSavedState(fss);
            }

#if DEBUG
            Mvx.Trace("Adding item #{0}: f={1} t={2}", position, fragment, fragmentTag);
#endif

            while (_fragments.Count <= position)
            {
                _fragments.Add(null);
            }

            fragment.SetMenuVisibility(false);
            fragment.UserVisibleHint = false;
            _fragments[position]     = fragment;
            _curTransaction.Add(container.Id, fragment, fragmentTag);

            return(fragment);
        }
        public override Android.Support.V4.App.Fragment GetItem(int position, Android.Support.V4.App.Fragment.SavedState fragmentSavedState = null)
        {
            var fragInfo = Fragments.ElementAt(position);
            var fragment = Android.Support.V4.App.Fragment.Instantiate(_context, FragmentJavaName(fragInfo.FragmentType));

            var mvxFragment = fragment as MvxFragment;

            if (mvxFragment == null)
            {
                return(fragment);
            }

            if (mvxFragment.GetType().IsFragmentCacheable(Mvx.Resolve <IMvxAndroidCurrentTopActivity>().Activity.GetType()) && fragmentSavedState != null)
            {
                return(fragment);
            }

            var viewModel = fragInfo.ViewModel ?? CreateViewModel(position);

            mvxFragment.ViewModel = viewModel;

            return(fragment);
        }
示例#3
0
 public abstract Android.Support.V4.App.Fragment GetItem(int position, Android.Support.V4.App.Fragment.SavedState fragmentSavedState = null);