Esempio n. 1
0
        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);
        }
Esempio n. 2
0
        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);
        }