ViewModelStore:用于存储ViewModel实例的类,内部持有一个HashMap保存实例,ViewModelProvider会将创建好的ViewModel实例保存到ViewModelStore中,之后再需要此类ViewModel的实例时就直接从中读取。 ViewModelProvider.Factory:前文已经提到,这是用于创建ViewModel实例的工厂,ViewModelProvider当需要ViewModel的实例又在ViewModelStore中没...
// val vm = ViewModelProviders.of(this,MyViewModel.MyViewModelFactory(this)).get(MyViewModel::class.java) // vm.info() val vm = ViewModelProviders.of(this,).get(MyViewModels::class.java) //获取实例 vm.getLiveData().observe(this){ //观察数据 } } } 1. 2. 3. 4. 5. 6. 7. 8....
privatefinalViewModelStoremViewModelStore;privatestaticfinalStringDEFAULT_KEY="androidx.lifecycle.ViewModelProvider.DefaultKey";@MainThreadpublic<TextendsViewModel>Tget(@NonNullClass<T>modelClass){StringcanonicalName=modelClass.getCanonicalName();if(canonicalName==null){thrownewIllegalArgumentException("Local an...
ViewModel,观察被选中的ItemSharedViewModelmodel=newViewModelProvider(requireActivity()).get(SharedViewModel.class);model.getSelected().observe(getViewLifecycleOwner(),newObserver<UserContent.UserItem>(){@OverridepublicvoidonChanged(UserContent.UserItemuserItem){//展示详情detail.setText(userItem.toString())...
(1)ViewModel的生命周期比Activity或者Fragment长,因此 ViewModel不能持有Context的对象,不然会出现内存泄漏。``(2)Activity在生命周期中可能会触发多次onCreate(),而ViewModel则只会在第一次onCreate()时创建,然后直到最后Activity销毁。ViewModel的基本使用 1.添加依赖 implementation 'androidx.lifecycle:lifecycle-...
ViewModel不会随着Activity的屏幕旋转而销毁; 在对应的作用域内,保正只生产出对应的唯一实例,保证UI组件间的通信 2)、重点说一下ViewModel和onSaveInstanceState的关系 对于简单的数据,Activity 可以使用 onSaveInstanceState() 方法从 onCreate() 中的捆绑包恢复其数据,但此方法仅适合可以序列化再反序列化的少量数据,...
ViewModel 介于 View(视图) 和 Model(数据模型) 之间,可以解耦分层,架构如下: 因为ViewModel 的生命周期比 Activity 长,所以当手机旋转屏幕时,可通过 ViewModel 处理数据的存储和恢复,其生命周期示例如下: 首先,新建 Jetpack3ViewModelTest 项目,在项目添加implementation 'androidx.lifecycle:lifecycle-extensions:2.2.0'...
二、ViewModel 的使用 ViewModel一般配合 LiveData 使用,首先,获取 ViewModel 实例,通过提供的类ViewModelProviders: MyViewModel model = ViewModelProviders.of(activity).get(MyViewModel.class);//或MyViewModel model = ViewModelProviders.of(fragment).get(MyViewModel.class); ...
publicclassEmployeeViewModel:INotifyPropertyChanged{publicICommand GiveBonusCommand {get;privateset;} ... } ICommand介面具有Execute方法,按一下該按鈕即會呼叫此方法。 如此一來,ICommand.Execute可直接取代Button.Click事件處理程式碼。 完整的ICommand介面還有兩個方法:CanExecute和CanExecuteChanged,用來決定控制...
3.1 ViewModelStore 树 3.2 系统级的配置无关支持 4 FragmentActivity 中的 ViewModel 生命周期 5多 Controller 共享 ViewModel 6 关于工厂模式的一点思考 1 什么是 ViewModel 1.1 先考虑两个场景 场景一:我们开发的 APP 可以转屏,转屏后将触发 Controller(Activity or Fragment) 的重建,为了维护转屏前后数据的一致...