我是靠谱客的博主 友好微笑,最近开发中收集的这篇文章主要介绍activity 点击后传递数据给fragment_ViewModel+LiveData实现Fragment间通信,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

2be9a3e4844e4f87165f57f610cd380f.png

在前面的文章中,我们已经知道,ViewModel能够将数据从Activity中剥离出来。只要Activity不被销毁,ViewModel会一直存在,并且独立于Activity的配置变化,即旋转屏幕导致的Activity重建,不会影响到ViewModel。

Fragment可以看作是Activity的子页面,即,一个Activity中可以包含多个Fragment,这些Fragment彼此独立,但是又都属于同一个Activity。

基于这些组件的特性,我们可以巧妙地利用ViewModel和LiveData,实现同一个Activity中的不同Fragment间通信。

7fb9496d8a5d135f7e8ab46321d3f10f.png
ViewModel+LiveData实现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查看程序执行效果。

f0cbeb57a0cb1be560fc8ad4640154cc.gif

可以看到,无论是滑动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间通信所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(49)

评论列表共有 0 条评论

立即
投稿
返回
顶部