public static void OnCreate(this IMvxFragmentView fragmentView, IMvxBundle bundle, MvxViewModelRequest request = null) { if (fragmentView.ViewModel != null) { //TODO call MvxViewModelLoader.Reload when it's added in MvvmCross, tracked by #1165 //until then, we're going to re-run the viewmodel lifecycle here. Android.Views.MvxFragmentExtensions.RunViewModelLifecycle(fragmentView.ViewModel, bundle, request); return; } var fragment = fragmentView.ToFragment(); if (fragment == null) { throw new MvxException($"{nameof(OnCreate)} called on an {nameof(IMvxFragmentView)} which is not an Android Fragment: {fragmentView}"); } // as it is called during onCreate it is safe to assume that fragment has Activity attached. var viewModelType = fragmentView.FindAssociatedViewModelType(fragment.Activity.GetType()); var view = fragmentView as IMvxView; var cache = Mvx.Resolve <IMvxMultipleViewModelCache>(); var cached = cache.GetAndClear(viewModelType, fragmentView.UniqueImmutableCacheTag); view.OnViewCreate(() => cached ?? fragmentView.LoadViewModel(bundle, fragment.Activity.GetType(), request)); }
public static void OnCreate(this IMvxFragmentView fragmentView, IMvxBundle bundle, MvxViewModelRequest request = null) { var cache = Mvx.IoCProvider.Resolve <IMvxMultipleViewModelCache>(); if (fragmentView.ViewModel != null) { // check if ViewModel instance was cached. If so, clear it and ignore previous instance cache.GetAndClear(fragmentView.ViewModel.GetType(), fragmentView.UniqueImmutableCacheTag); return; } var fragment = fragmentView.ToFragment(); if (fragment == null) { throw new MvxException($"{nameof(OnCreate)} called on an {nameof(IMvxFragmentView)} which is not an Android Fragment: {fragmentView}"); } // as it is called during onCreate it is safe to assume that fragment has Activity attached. var viewModelType = fragmentView.FindAssociatedViewModelType(fragment.Activity.GetType()); var view = fragmentView as IMvxView; var cached = cache.GetAndClear(viewModelType, fragmentView.UniqueImmutableCacheTag); view.OnViewCreate(() => cached ?? fragmentView.LoadViewModel(bundle, fragment.Activity.GetType(), request)); }