Android DataBinding在Activity、Fragment中的使用及数据共享

Android DataBinding与MVVM架构实战指南 数据绑定(DataBinding)是Android开发中实现UI自动更新的核心技术,其通过声明式编程将数据模型与视图组件直接关联。MVVM架构模式利用数据绑定实现ViewModel与View的解耦,形成双向数据流机制。在工程实践中,DataBinding能显著减少样板代码,配合LiveData可实现响应式UI更新,适用于表单处理、列表渲染等高频交互场景。本文以电商应用为例,详解如何通过@BindingAdapter定制绑定逻辑,并分享RecyclerView优化等进阶技巧,帮助开发者规避内存泄漏等常见问题。 阅读详情

本篇记录Activity、Fragment使用DataBinding的不同方式,以及Activity下的不同Fragment间的数据共享

开启DataBinding

首先我们要在app gradle中开启DataBinding

    // Turn on DataBinding
    dataBinding {
        enabled true
    }

更改布局文件

然后我们要把布局文件开启DataBinding。下图是已经切换完成后的布局文件。我们只要按Alt + Enter键,就可以看到图一
图一

选择Convert to data binding layout 就转换为了dataBinding layout。
转换后的布局

具体使用

上面已经转换为绑定布局,转换之后就会生成Activity/Fragment + Name + Binding的对象。下面我们分别说明在Activity和Fragment中的使用

Activity

以MainActivity为例,

	private ActivityMainBinding binding;
	@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        binding = DataBindingUtil.setContentView(this, R.layout.activity_main);
	}
Fragment
	private FragmentHomeBinding binding;
	@Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        binding = DataBindingUtil.inflate(inflater, R.layout.fragment_home, container, false);
        return binding.getRoot();
    }

通过上面我们可以看出在Activity和Fragment使用方法不同。

数据共享

最后我们在说一下Activity下的多个Fragment的数据共享问题

我们先说一下原理,ViewModel的创建方式是这样的

	MainViewModel viewModel = new ViewModelProvider(this).get(MainViewModel.class);

如果是Activity下的Fragment创建,那么我们需要把this改为它所在的Activity就可以获取Activity所对应的ViewModel,然后多个Fragment也就可以在ViewModel中进行数据共享了。

  1. MainActivity
    首先我们在MainActivity中创建ViewModel
	MainViewModel viewModel = new ViewModelProvider(this).get(MainViewModel.class);
  1. HomeFragment
	MainViewModel viewModel = new ViewModelProvider(Objects.requireNonNull(getActivity())).get(MainViewModel.class);

然后就没了,就可以做你想做的事情了。

Fragment与ViewModel(MVVM架构) 在Android应用开发中,Fragment和ViewModel是两个非常重要的概念,它们分别属于架构组件库的一部分,旨在帮助开发者构建更加模块化、健壮且易维护的应用。如果你的布局是要直接设置为 Activity 的根布局,通常使用第一种方法,因为不需要考虑容器问题。如果你的布局是要作为子布局添加到某个容器中(比如在 Fragment 或者自定义 View 中),那么你应该使用第二种方法,并且要确保参数设置正确,以便于控制布局是否应该被自动添加到容器中。在大多数情况下,Activity。 阅读详情

相关推荐

Android DataBinding ViewPage + Fragment 封装

Android DataBinding ViewPage + Fragment 封装

DataBinding快速入门

循序渐进,注重实践,帮助同学们系统的掌握DataBinding的基本使用

IBM X3650 M4做raid阵列

步骤1.开机出现此界面,同时按ctrl键和h键,进入IBM X3650 M4配置raid界面。 【注】不知道是不是因为我的服务器长期闲置,按键ctrl键和h键居然无法进入raid配置界面。这时候,我们可以进bios同样可以进入raid配置界面。如果你按ctrl键和h键就可以直接进入raid配置界面,那么请忽略此段,直接看步骤2 开机,按键F1,选中system setting ,接着选中Adapters and UEFI Drivers ...

ani5565的博客 2万+

Android开发教程 - 使用Data Binding(四)在Fragment中的使用

修改fragment的布局 同上一篇:在Activity中的使用中一样,在Fragment中使用Data Binding同样需要修改布局,修改方式也跟Activity一样,在最外层加上\标签: <?xml version="1.0" encoding="utf-8"?> <layout xmlns:andro

Lloyd的专栏 7805

igh ethercat 实时性测试

组备注std(us)max(us)a无锁核,无rt补丁8.38108b锁核+FIFO调度+内存锁定,无rt补丁0.9216c锁核+FIFO调度+内存锁定,+rt补丁0.9922可以看到 a组 使用ethercat不做其他优化,周期抖动非常大,且max能达到 100 多 us;通过 锁核+FIFO调度+内存锁定 进行优化,可以看到 抖动明显降低,且max 为 20 us 左右;

qq_43353632的博客 2311

江科大51单片机笔记【1】单片机及开发板介绍

单片机,Micro Controller Unit,简称MCU,内部集成了CPU、RAM、ROM、定时器、中断系统、通讯接口等一系列电脑的常用硬件功能单片机的任务是信息采集(传感器)、处理(CPU)和硬件设备(电机、LED)的控制单片机算是一个袖珍版计算机,是一个完整的计算机系统,成本低体积小结构简单单片机的使用领域:智能仪表、实时工控、通讯设备、导航系统、家用电器等。

2301_80195807的博客 839

DataBinding使用记录:2、DataBinding在Fragment的使用、方法事件绑定等

参考博文: https://blog.youkuaiyun.com/u010143939/article/details/84634306 https://www.jianshu.com/p/1b6267402e43 Android开发教程 - 使用Data Binding(四)在Fragment中的使用 Databinding在Activity和Fragment中使用的注意事项 DataBinding在Fragment中无效 ...

鲁迷那的专栏—坚持实践后再写出来! 2198

开源:AI+无人机巡检系统项目调研

本文系统梳理了主流开源无人机巡检技术栈,涵盖飞控系统(PX4/ArduPilot)、地面站软件(QGroundControl)、AI视觉识别(VisDrone/MPID/CPLID数据集)、三维重建(OpenDroneMap/COLMAP)和仿真模拟(AirSim/Gazebo)五大领域。通过对比各项目的技术特点、开发语言、开源协议及商用友好度,为无人机巡检产品开发提供完整的技术选型参考。重点推荐PX4飞控、DroneKit开发API等商用友好项目,同时分析了GPL/AGPL协议项目的开源要求。

lovehu6686的博客 2453

将DataBinding整合到Activity/Fragment的一种极简方式

自从Google推出DataBinding/ViewBinding后,获取视图控件变得简单、高效且安全。而Activity中原本 public class TestActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView

乐征skyline 902

医学图像配准实战:用Python实现MIND特征提取(附完整代码)

本文详细介绍了MIND(模态无关邻域描述符)在医学图像配准中的应用。通过Python和PyTorch实战,从原理到代码逐步解析了如何提取MIND特征,并利用其对结构而非灰度的感知能力,有效解决CT、MRI等多模态图像的对齐难题,为病灶追踪、手术导航等高级应用提供鲁棒性基础。

263

华为s110、s220、s310、s530、s620 配置ssh,配置web登录

在服务器端创建SSH用户。

送个祝福给小豪的博客 319

Android DataBinding绑定

如果是Activity下的Fragment创建,那么我们需要把this改为它所在的Activity就可以获取Activity所对应的ViewModel,然后多个Fragment也就可以在ViewModel中进行数据共享了。Alt + Enter键,选择Convert to data binding layout 就转换为了dataBinding layout。通过上面我们可以看出在Activity和Fragment使用方法不同。最后我们在说一下Activity下的多个Fragment的数据共享问题。

weixin_42294959的博客 398

WIN10系统下VS2019编译CloudCompare2.12.4

CloudCompare2.12.4

点云侠的博客 3145

使用DataBinding还在为数据处理头疼?这篇文章帮你解决问题

外链图片转存中…(img-xfu2zkLk-1711005859499)]

2201_75604341的博客 451

让 ABAP 开发更聪明的搭档:SAP Joule for Developers 与 ABAP AI Capabilities 全面实战

摘要:SAP已将生成式AI集成到ABAP开发工具中,推出Joule for Developers功能。该功能直接嵌入Eclipse开发环境,提供代码解释、生成、测试构造和遗留代码迁移等辅助功能。Joule支持ABAP Cloud项目开发,能围绕当前开发对象提供上下文相关的建议,帮助开发者高效完成应用开发与迁移任务。启用该功能需升级ADT并获取相应许可,典型应用场景包括RAP应用构建和S/4HANA迁移中的代码重构。官方资源提供了多个实践案例,帮助开发者快速上手这一AI辅助开发功能。(149字)

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 495

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

MVVM实现与原理分析

1-MVVM简介 1.1-MVC & MVP & MVVM MVPMVVM与MVP结构类似,MVP也是通过Presenter将View与Model解耦。不过MVVM是基于观察者模式,viewModel不持有Activity/Fragment实例,数据更新驱动UI更新。 MVC视图层用xml或者代码描述,控制层由Activity和Fragment实现。控制层太复杂,显示逻辑和其他逻辑在一起不便维护 MVVM低耦合。View模块可独立于Model的变化。复用性。一个ViewModel可以绑定到不同的View上,

1336

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

使用jetpack在 Fragment 之间共享数据

在 Fragment 之间共享数据 同一个Activity下的多个Fragment之间实现数据共享: 1.ViewModle中的共享数据用MutableLiceData<T> 定义。 2.使用ViewModelProvider持有相同Activity并生成ViewModle实例。 Activity: public class ThirdActivity extends AppCompatActivity { @Override protected void onCr

玲珑玉庆的博客 613

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

Fragment 共享数据新姿势

多个 Fragment 之间共享数据是很常见的需求,常见的做法是在 Fragment 中通过 Activity 来通知另外另外的 Fragment,或者使用 EventBus 等三方库来实现。 Google 推出的 Jetpack 给我们提供了很多有用的工具,其中 ViewModel 和 LiveData 是最常用的工具之一,通过这两个工具我们可以使用新的姿势来实现 Fragment 之间共享数据...

lee的专栏 1160

安卓Jetpack架构组件(二):ViewModel+LiveData的使用

前言 上一篇我们介绍了单独的ViewModel组件的使用实例,Android文档中建议我们LiveData配合ViewModel使用,那么LiveData到底是什么,两者怎么结合使用呢? LiveData是一个可观察的数据持有者类,具有如下优点: 1,LiveData作为被观察者,数据可以被观察者订阅,当数据有变化时会通知观察者(UI)。 2,减少内存泄漏,因为LiveData能够感知组件的生命周...

智玲君 1152

Android fragment+MVVM

Android Fragment+MVVMAndroid fragment+MVVMFragmentFragment生命周期Fragment 管理器访问 FragmentManagerFragment 动画设置动画设置过渡Fragment 数据共享模式使用 ViewModel 共享数据在 Fragment 之间共享数据在父 Fragment 与子 Fragment 之间共享数据使用 Fragment Result API 获取结果Fragment + LiveData + DataBinding使用举例 A

qq_43368047的博客 1954

使用Android DataBinding时发现只能显示一次,不能动态更新数据

使用Android DataBinding时发现只能显示一次,不能动态更新数据 本文只是记录解决错误的过程,可能起不到分享的意义。 刚开始使用 dagger2 + DataBinding 的结构,很多东西也不是很清晰。 现象 一个页面有三块布局,我使用一个Activity搭配三个Fragment实现。 通过三个Fragment共同使用Activity的ViewModel来实现数据共享...

android_zyf的博客 5929

安卓面试题总结

Android 的四大组件分别是:Activity、Service、Broadcast Receiver 和 Content Provider. 1)Activity:这是你与用户进行交互的入口。每一个 Activity 都是一个单独的界面,负责显示 UI和响应用户操作。 2)Service:Service 是运行在后台且不直接与用户交互的组件。适用于需要在后台执行长时间运行操作的任务,类似播放音乐或下载文件等。 3)Broadcast Receiver:用于

my_power520的博客 588

Android Jetpack 之 ViewModel

简介: 官方解释:ViewModel 类旨在以注重生命周期的方式存储和管理界面相关的数据。 ViewModel 类让数据可在发生屏幕旋转等配置更改后继续存在。 其实简单来讲就是解决下面的问题: 1、Activity配置更改重建时(比如屏幕旋转)保留数据; 2、UI组件(Activity与Fragment、Fragment与Fragment)间实现数据共享。 第一种情况下我们一般是通过onSa...

Tracy1024的博客 631

Android面试进阶:从生命周期到架构设计,掌握核心原理与工程实践

在Android开发领域,理解核心组件原理与系统机制是构建稳定、高性能应用的基础。Activity、Fragment等组件的生命周期管理,不仅是面试高频考点,更是处理页面状态、数据恢复与内存管理的工程实践核心。其背后涉及系统对应用进程与任务栈的调度原理,深刻理解这些机制,能有效避免内存泄漏与状态不一致问题,提升应用健壮性。随着Jetpack架构组件的普及,ViewModel、LiveData等现代技术方案,为数据驱动UI和生命周期感知编程提供了标准化支持,推动了MVVM等架构模式在工程中的落地。这些技术价值

weixin_33713350的博客 476

Android官方架构组件介绍之ViewModel

ViewModel 像Activity,Fragment这类应用组件都有自己的生命周期并且是被Android的Framework所管理的。Framework可能会根据用户的一些操作和设备的状态对Activity或者Fragment进行销毁和重构。作为开发者,这些行为我们是无法干预的。 所以Activity或Fragment中的一些数据也会随着销毁而丢失,随着重构而重新生成。比如你的Activity...

weixin_30516243的博客 251

【Jetpack 内核实战 02】ViewModel:生命周期管理与数据持久化核心实战

本文从源码视角深度拆解 ViewModel 核心机制,覆盖生命周期原理、ViewModelStore 底层实现、带参 Factory 封装、Fragment 间数据共享、AndroidViewModel 选型等核心内容,全程地道 Kotlin 写法,配套记事本项目预集成代码与高频避坑指南。

Jm0218Xx的博客 546
上一篇: Android 点击两次Back键监听退出程序
下一篇: Android自定义View 简单拖拽实现(一)
是阿秋吖
博客等级 码龄10年 7粉丝 33原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值