概述
在前面的文章中,我们已经知道,ViewModel能够将数据从Activity中剥离出来。只要Activity不被销毁,ViewModel会一直存在,并且独立于Activity的配置变化,即旋转屏幕导致的Activity重建,不会影响到ViewModel。
Fragment可以看作是Activity的子页面,即,一个Activity中可以包含多个Fragment,这些Fragment彼此独立,但是又都属于同一个Activity。
基于这些组件的特性,我们可以巧妙地利用ViewModel和LiveData,实现同一个Activity中的不同Fragment间通信。
1.定义ViewModel及LiveData。
public
2.为了方便演示,我们将两个Fragment等比例放置在Activity的layout中,你也可以放置在不同的layout中,然后通过FragmentManager进行切换,只要保证这两个Fragment都属于同一个Fragment即可。
<?xml version="1.0" encoding="utf-8"?>
3.编写Fragment的代码,实现具体的通信。这里以OneFragment为例,TwoFragment也是类似的代码。
public
4.在Fragment的布局文件中放置一个SeekBar控件。
<?xml version="1.0" encoding="utf-8"?>
5.运行Activity查看程序执行效果。
可以看到,无论是滑动OneFragment还是TwoFragment中的SeekBar,另外一个Fragment中的SeekBar也会跟着滑动。滑动SeekBar时,通过LiveData.setValue(),修改了ViewModel中LiveData包装的数据(progress字段)。由于Fragment通过LiveData.observe()方法,监听了数据的变化,所以progress字段被修改后,Fragment能够第一事件收到通知,进而更新UI。这就是利用ViewMode和LiveData实现Fragment间通信的原理。另外,从演示图中,我们还能看到,屏幕旋转后SeekBar的进度与旋转前保持一直,数据并未丢失,这也是ViewModel带来的好处之一。
最后
以上就是友好微笑为你收集整理的activity 点击后传递数据给fragment_ViewModel+LiveData实现Fragment间通信的全部内容,希望文章能够帮你解决activity 点击后传递数据给fragment_ViewModel+LiveData实现Fragment间通信所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复