protected virtual void RemoveFragmentsFromBackStack() { FragmentsBackStack.ForEach(x => { UnbindCycle(x.ViewModel); }); FragmentsBackStack.Clear(); }
protected virtual void RemoveFragmentFromBackStack(string fragmentName) { var existCache = FragmentsBackStack.FirstOrDefault(x => x.Key == fragmentName); if (existCache != null) { UnbindCycle(existCache.ViewModel); FragmentsBackStack.Remove(existCache); } }
protected virtual void RemoveFragmentFromBackStack(MvxFragmentPresentationAttribute fragmentAttribute) { var fragmentName = FragmentJavaName(fragmentAttribute.ViewType); var existCache = FragmentsBackStack.FirstOrDefault(x => x.Key == fragmentName); if (existCache != null) { UnbindCycle(existCache.ViewModel); FragmentsBackStack.Remove(existCache); } }
protected override bool TryPerformCloseFragmentTransaction(FragmentManager fragmentManager, MvxFragmentPresentationAttribute fragmentAttribute) { var fragmentName = FragmentJavaName(fragmentAttribute.ViewType); var fragmentTransaction = fragmentManager.BeginTransaction(); fragmentTransaction.DisallowAddToBackStack(); PopFragment(fragmentManager, fragmentTransaction, fragmentAttribute, fragmentName, true); var newLastCachedFragment = FragmentsBackStack?.LastOrDefault(); if (newLastCachedFragment != null) { PushFragment(fragmentManager, fragmentTransaction, null, null, newLastCachedFragment.ViewModel, newLastCachedFragment.Key); } fragmentTransaction.CommitNow(); return(true); }
public virtual void MoveBack() { if (CanPop()) { var cachedFragment = FragmentsBackStack?.LastOrDefault(); if (cachedFragment != null) { var fragmentManager = CurrentFragmentManager; var fragmentTransaction = fragmentManager.BeginTransaction(); fragmentTransaction.DisallowAddToBackStack(); PopFragment(fragmentManager, fragmentTransaction, DeqeueFragmentAttributeIfExist(cachedFragment.Key), cachedFragment.Key, true); var newLastCachedFragment = FragmentsBackStack?.LastOrDefault(); if (newLastCachedFragment != null) { PushFragment(fragmentManager, fragmentTransaction, null, null, newLastCachedFragment.ViewModel, newLastCachedFragment.Key); } fragmentTransaction.CommitNow(); } } else { if ((new Java.Util.Date().Time - LastBackClick.Time) / 1000 < 3) { CurrentActivity.FinishAffinity(); Process.KillProcess(Process.MyPid()); } else { LastBackClick = new Java.Util.Date(); (CurrentActivity as ICommonActivity)?.ShowToast("Для выхода из приложения нажмите кнопку повторно"); } } }
public virtual T GetAndClear <T>(string viewModelTag = "singleInstanceCache") where T : IMvxViewModel { var existCache = FragmentsBackStack.LastOrDefault(x => x.Key == viewModelTag); return((T)existCache?.ViewModel); }
public virtual IMvxViewModel GetAndClear(Type viewModelType, string viewModelTag = "singleInstanceCache") { var existCache = FragmentsBackStack.LastOrDefault(x => x.Key == viewModelTag); return(existCache?.ViewModel); }
protected virtual void PopFragment(FragmentManager fragmentManager, FragmentTransaction fragmentTransaction, MvxFragmentPresentationAttribute fragmentAttribute, string fragmentName, bool removeIsNeeded = false, bool forward = false) { fragmentAttribute = fragmentAttribute ?? DeqeueFragmentAttributeIfExist(fragmentName); if (fragmentAttribute != null) { if (!fragmentAttribute.EnterAnimation.Equals(int.MinValue) && !fragmentAttribute.ExitAnimation.Equals(int.MinValue)) { if (!fragmentAttribute.PopEnterAnimation.Equals(int.MinValue) && !fragmentAttribute.PopExitAnimation.Equals(int.MinValue)) { fragmentTransaction.SetCustomAnimations(fragmentAttribute.EnterAnimation, fragmentAttribute.ExitAnimation, fragmentAttribute.PopEnterAnimation, fragmentAttribute.PopExitAnimation); } else { fragmentTransaction.SetCustomAnimations(fragmentAttribute.EnterAnimation, fragmentAttribute.ExitAnimation); } } if (fragmentAttribute.TransitionStyle != int.MinValue) { fragmentTransaction.SetTransitionStyle(fragmentAttribute.TransitionStyle); } } if ((FragmentsBackStack.LastOrDefault(x => x.Key == fragmentName)?.ViewModel as IBaseViewModel)?.VmNavigationType == NavigationType.PresentModal) { lock (this) { _presentedModalFragments--; } } var oldFragment = fragmentManager.FindFragmentByTag(fragmentName); if (oldFragment != null) { if (!oldFragment.IsDetached) { if (removeIsNeeded) { RemoveFragmentFromBackStack(fragmentName); fragmentTransaction.Remove(oldFragment); } else { fragmentTransaction.Detach(oldFragment); } } else if (removeIsNeeded) { RemoveFragmentFromBackStack(fragmentName); fragmentTransaction.Remove(oldFragment); } if (!forward) { OnFragmentPopped(fragmentTransaction, oldFragment, null); } } }
protected virtual void AddFragmentToBackStack(ViewModelBundleCache bundle) { FragmentsBackStack.Add(bundle); }