public static TViewModel Get <TViewModel>( [NotNull] IViewModelStoreOwner owner, [NotNull] string key, [CanBeNull] IBundle stateBundle) where TViewModel : class, IViewModel, IViewModelWithState { if (owner == null) { throw new ArgumentNullException(nameof(owner)); } if (key == null) { throw new ArgumentNullException(nameof(key)); } if (string.IsNullOrWhiteSpace(key)) { throw new ArgumentException("Value cannot be null or whitespace.", nameof(key)); } var store = owner.GetViewModelStore(); var viewModel = store.Get <TViewModel>(key); if (viewModel == null) { viewModel = Get <TViewModel>(GetFactory(), stateBundle); store.Set <TViewModel>(key, viewModel); } return(viewModel); }
internal static ViewModelStore GetViewModelStore([NotNull] this IViewModelStoreOwner owner) { var fragmentManager = owner.GetFragmentManager(); var store = (ViewModelStore)fragmentManager.FindFragmentByTag(ViewModelStoreTag); if (store == null) { store = new ViewModelStore(); var fragmentTransaction = fragmentManager .BeginTransaction().NotNull() .Add(store, ViewModelStoreTag).NotNull(); if (Build.VERSION.SdkInt >= BuildVersionCodes.N) { fragmentTransaction.CommitNow(); } else { fragmentTransaction.Commit(); fragmentManager.ExecutePendingTransactions(); } } return(store); }