可以通过LiveData在ViewModel中观察Activity的生命周期,从而获取Activity的引用。 publicclassMyViewModelextendsViewModel{privateMutableLiveData<Activity>activityLiveData=newMutableLiveData<>();publicvoidsetActivity(Activityactivity){activityLiveData.setValue(activity);}publicLiveData<Activity>getActivity(){returnactivityLiveD...
在上述示例中,MainActivity 实现了 ActivityCallback 接口,并将自身实例传递给了 MyViewModel,使得 MyViewModel 可以通过回调方法获取到 MainActivity 实例,从而实现了在 ViewModel 中获取 Activity 对象的需求。 通过使用接口回调,我们可以在 ViewModel 中获取到所需的 Activity 对象,并在其中执行与视图相关的操作。这种...
){super.onViewCreated(view,savedInstanceState)valuserListView=view.findViewById<RecyclerView>(R.id.user_list)userListView.layoutManager=LinearLayoutManager(requireContext(),LinearLayoutManager.VERTICAL,false)// 通过requireActivity获取Activity的ViewModelvalviewModel=ViewModelProvider(requireActivity()).get(User...
与Activity或Fragment的生命周期不同,ViewModel 会在配置变更后继续存在,这意味着即使发生如屏幕旋转这样的配置变更,ViewModel中的数据也不会丢失。ViewModel通过ViewModelProvider与Activity或Fragment关联,并依赖于宿主组件的生命周期来获取数据。 ViewModelProvider viewModelProvider = new ViewModelProvider(this); MyViewModel ...
ViewModel 能在 Activity(Fragment) 在由于配置重建时恢复数据的实现原理是:Activity(指 support library 中的 ComponentActivity) 会将 ViewModelStore 在 Activity(Fragment) 重建之前交给 ActivityThread 中的 ActivityClientRecord 持有,待 Activity(Fragment) 重建完成之后,再从 ActivityClientRecord 中获取 ViewModelStore...
//在Activity中更新数据ViewModelProviders.of(getActivity()).get(AViewModel.class). updateUser();2.ViewModel绝对不要持有下列引用1.view2.Lifecycle3.其他任何可能持有Activity Context的类的引用 3.ViewModel中使用Context如果ViewModel需要Applicaiton的Context(为了获取系统服务),该如何处理?自定义一个类,继承自...
ViewModel的特点: ViewModel生命周期比Activity长 数据可在屏幕发生旋转等配置更改后继续留存。下面是ViewModel生命周期图: 可以看到即使是发生屏幕旋转,旋转之后拿到的ViewModel跟之前的是同一个实例,即发生屏幕旋转时,ViewModel并不会消失重建;而如果Activity是正常finish(),ViewModel则会调用onClear()销毁。
首先在Activity中使用ViewModel时,不能直接new出来一个对象,这样的话完全起不到在配置更改时保存数据的作用。取而代之的是用ViewModelProvider类来获取一个ViewModel对象。例如已经写好了一个MainViewModel用来保存MainActivity类中的数据,那么在MainActivity中获取其实例的方法可以是: ...
(1) ViewModel 子类的获取方式 例如: mSeekBarViewModel = new ViewModelProvider(requireActivity()).get(SeekBarViewModel.class); 这里是在Fragment 里面的,需要两个Fragment 同步数据的话(在同一个Activity上显示),必须传递ower 为activity 非this(fragment) ...