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

2023-05-16

本篇记录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);

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android DataBinding在Activity、Fragment中的使用及数据共享 的相关文章

  • 如何在android网络库(ION)中使用自签名SSL?

    使用此网络库 https github com koush ion https github com koush ion 由于当前状态是开发 我想使用自签名 SSL 证书 图书馆论坛有一些讨论 https github com koush
  • 我在哪里可以获得可靠的熵来源(真正的随机性字节[])?

    目前 我正在寻找一种方法来增加随机性的质量 in my Android应用程序 纸牌游戏 之前 估计对于我的情况 52 排列 至少需要 226 位熵 226 个随机位 我打算用这个byte 作为种子SecureRandom SecureRa
  • 让协程等待之前的调用

    我还没有完全掌握 Kotlin 协程 基本上我希望协程在执行之前等待任何先前的调用完成 下面的代码似乎可以工作 但它正在做我认为它正在做的事情吗 private var saveJob Job null fun save saveJob s
  • Android 应用程序在启动时打开应用程序信息屏幕,而不是启动主 Activity

    我不确定这是否是一个问题 但这是我第一次遇到这个问题 我正在开发一个应用程序 当我在进行一些编码后断开应用程序与 Android Studio 和 PC 的连接时 如果我尝试在手机上打开应用程序 它会启动app info屏幕 我们看到强制停
  • 使用 HttpClient 时,为什么服务器响应中省略了 Content-Length 标头?

    我正在使用这个问题的源代码如何异步执行httprequest并显示下载响应的进度 https stackoverflow com questions 9594318 how to asynchronous perform a httpreq
  • 从 arraylist 和 hashmap 中删除重复项

    我有一个数组列表 其中包含付款人的姓名 另一个数组列表包含每次付款的费用 例如 nameArray 尼古拉 劳尔 洛伦佐 劳尔 劳尔 洛伦佐 尼古拉 价格数组 24 12 22 18 5 8 1 我需要将每个人的费用相加 所以数组必须变成
  • 如何访问android库项目中的资源

    我正在构建一个 android 库项目 它内部需要一些静态资源 图像 xml 等 然后我想知道我可以把这些资源放在哪里以及如何访问它们 既然我把资源放到了assets文件夹 我使用 AssetManager 来访问资源 public cla
  • onScale 事件后触发奇怪的 onScroll 事件

    我有一个同时使用 SimpleOnScaleGestureListener 和 SimpleOnGestureListener 的应用程序 每当我进行捏缩放时 我都会得到预期的 onScale 但是当我抬起时 我会看到一个奇怪的 onScr
  • 位图内存不足错误

    我对这个错误有疑问 我从 URL 制作网站图标解析器 我这样做是这样的 public class GrabIconsFromWebPage public static String replaceUrl String url StringB
  • Android 版 jTwitter 授权错误

    我在我的 Android 应用程序中使用 jTwitter 库 直到前天一切都运转良好 但今天遇到异常 服务提供商响应错误 301 请帮助我 这是堆栈跟踪 02 21 21 07 27 258 E AndroidRuntime 4013 F
  • 在 Android Lollipop 中从 Uri 中裁剪照片后总是返回 Null?

    我尝试在拍照或挑选照片后从 Uri 中裁剪图像 我的代码是这样的 public static void cropImage Uri uri Activity activity int action code Intent intent ne
  • 如何从android中的外部存储中获取所选文件的文件路径?

    我在选择文件的文件路径时遇到问题 我搜索了整个堆栈溢出 但问题没有解决 从设备中选择文件的代码如下所示 Intent intent new Intent Intent ACTION GET CONTENT intent setType in
  • 如何制作在手机和平​​板电脑上使用的响应式Android应用程序?

    我创建了一个 Android 应用程序 当我运行我的应用程序时Mobile Phone它工作得很好 但是当我跑进去时Tablet应用程序的布局已更改 那么 如何制作响应式Android应用程序用于Mobile并且也在Tablet 在Andr
  • Android 纹理仅显示纯色

    我正在尝试在四边形上显示单个纹理 我有一个可用的 VertexObject 它可以很好地绘制一个正方形 或任何几何对象 现在我尝试扩展它来处理纹理 但纹理不起作用 我只看到一种纯色的四边形 坐标数据位于 arrayList 中 the ve
  • 未解决的包含:“cocos2d.h” - Cocos2dx

    当我在 Eclipse 中导入 cocos2dx android 项目时 我的头文件上收到此警告 Unresolved inclusion cocos2d h 为什么是这样 它实际上困扰着我 该项目可以正确编译并运行 但我希望这种情况消失
  • 剪切评级栏中的图像

    我制作了自己的评级栏 花朵图像有 4 种尺寸 xdpi hdpi 等 从 24px24px 到 64x64px
  • 在android中创建SQLite数据库

    我想在我的应用程序中创建一个 SQLite 数据库 其中包含三个表 我将向表中添加数据并稍后使用它们 但我喜欢保留数据库 就好像第一次安装应用程序时它会检查数据库是否存在 如果存在则更新它 否则如果不存在则创建一个新数据库 此外 我正在制作
  • 在 Android 手机中通过耳机插孔发送数据

    我目前正在处理一个新项目 我必须通过具有特定电压的耳机插孔发送数据 然后我可以在该电压上工作 所以这里我需要根据我的数据来编程具体电压 我是否可以在android中访问耳机的输出电压 然后创建一个应用程序来控制该电压 这是一篇讨论此问题的
  • Fragment 生命周期和在不存在的 Fragment 上调用 onCreate 的问题

    我正在 Android 中测试片段 并且片段生命周期有一些令人困惑的行为 我有一个活动 在横向和纵向模式下使用 xml 布局 我有一些代码可以访问在片段布局之一中定义的 EditText 对象 如果我以横向模式启动应用程序 一切都会正常 我
  • R.java是手动修改的!恢复到生成的版本

    我在布局中添加了一个 xml 文件 之后这个错误就来了 但问题是我还没有接触过 R java 文件 现在 在我的新活动中 我要将其内容视图设置为我新创建的 xml 文件 但是当我执行 R layout 时 新创建的 xml 不会出现在建议中

随机推荐

  • 2023安装archlinux笔记

    本文只是个笔记 xff0c 不是详细教程 xff0c 仅供参考 安装过程基本与 2021年vmware安装archlinux https blog csdn net lxyoucan article details 115226297 差不
  • 命令行临时关闭Hyper-V功能

    背景 安装VMware时有如下提示 xff1a 命令行关闭Hyper V功能 xff08 1 xff09 以管理员身份 xff08 win 43 x xff09 运行命令提示符 xff1b xff08 2 xff09 执行命令 xff1a
  • debian安装ssh服务

    安装 span class token function apt get span span class token function install span openssh server 安装完成以后 可以通过以下命令看到它们运行的进程
  • kitty 终端使用ssh

    我的主要终端软件就是使用kitty 但是在kitty中直接使用ssh时会有一些小问题 比如 xff1a ranger htop这类的在命令行中的 图形 软件打开会报错 Error opening terminal xterm kitty c
  • archlinux 罗技K380 F1-F12 功能键锁定

    在windows中罗技K380可以安装Logitech Options来实现这个Fn锁定功能 在linux中如何实现 Logitech Options中没有linux版本的 有开发者针对罗技的无线设备开发了Solaar软件 xff0c 可以
  • linux中的图形化UDP调试工具

    sokit freeware version 1 3 1 GPLv3 website https github com sinpolib sokit 这是一个TCP UDP数据包收发和传输工具 linux汉化 默认是英文版本的 xff0c
  • UDP内网穿透实战

    场景 最近的项目在做设备对接功能 设备对接协议使用的是UDP协议的 设备在客户那 因为设备太昂贵搬过来不现实 驻场开发又太麻烦了 所以就只能在远程桌面中开发 远程桌面中开发束手束脚的太麻烦了 所以想到了内网穿透 tcp协议的穿透经常玩 UD
  • sqlserver数据库备份与还原的几种方式

    在开发与运维的过程中 xff0c 数据的备份与还原是经常用到的 今天就说说我在sqlserver中常用的几个方法 xff0c 仅供参考 SQL Server Management Studio备份与还原 这种方法在开发环境中经常使用 xff
  • MySQL必知必会系列一:数据库老师没教过的数据库知识!!!

    在讲MySQL之前 xff0c 关于数据库有一个非常有意思的现象 xff1b 许多人认为MySQL或者Oracle等 xff0c 都等同于数据库 xff0c 这是不正确的 xff0c 准确来说它们是DBMS Database Managem
  • archlinux docker配置php5.3

    一直在维护一下10年前的老项目 xff0c 是基于php5 3开发的 一直在使用windows虚拟机在开发php5 3 最近就想尝试在archlinux主系统中开发 什么是php PHP 是一种广泛使用的通用脚本语言 xff0c 特别适合
  • IDEA中安装了lua插件后无法启动的解决办法

    现象 使用Idea编辑lua脚本 xff0c 根据提示安装了相关插件 安装完成后 xff0c 发现idea无法正常启动了 报错如下 2023 03 10 13 45 00 952 812 ERROR llij ide plugins Plu
  • Go 国内加速镜像

    Go 默认下载太慢了 xff0c 还老是timeout 有不有什么解决办法呢 xff1f linux 下面使用方法 启用 Go Modules 功能 go env w GO111MODULE 61 on 配置 GOPROXY 环境变量 xf
  • go打包成linux程序

    看到一个不错的的go开源项目 xff0c https github com antonmedv countdown 但是它只提供源码 xff0c 用起来不太方便 我在本地搭建了一下GO的运行环境 xff0c 每次运行程序都要 go run
  • Can‘t open /run/atd.pid to signal atd. No atd running?

    现象 echo 34 notify send 39 Stop it and go home now 39 39 Enough work for today 39 u critical 34 at now 13 27 33 warning c
  • 转换 nvarchar 值 ‘201201013201201013201201013‘ 时溢出了整数列

    现象 执行 select from lx stuinfo where lx stuinfo stunu 61 202202002 报错如下 xff1a 消息 248 xff0c 级别 16 xff0c 状态 1 xff0c 第 2 行 转换
  • RuoYi若依项目部署实战

    环境 OS Amazon Linux 2 x86 64Host c5 2xlargeKernel 5 10 173 154 642 amzn2 x86 64 mysql root密码为yourpasswd 64 2023 xff0c 数据库
  • linux C++ hello world

    我是Java程序员 xff0c 没怎么写过C 43 43 以前在windows下使用vs写过hello world 最近有个程序需要使用C 43 43 实现 我想在linux下写 xff0c 记录一下过程 安装gcc 查看gcc版本 gcc
  • mybatis foreach 批量删除 传两个参数

    需求 foreach中要传两个参数 xff0c 一个是id xff0c 一个是list 怎么传呢 xff1f 单list的情况 Mapper java span class token comment 批量删除 64 param teamL
  • ubuntu22.04 dlopen(): error loading libfuse.so.2

    报错如下 navicat16 premium cs AppImage dlopen error loading libfuse so 2 AppImages require FUSE to run You might still be ab
  • Android DataBinding在Activity、Fragment中的使用及数据共享

    本篇记录Activity Fragment使用DataBinding的不同方式 xff0c 以及Activity下的不同Fragment间的数据共享 开启DataBinding 首先我们要在app gradle中开启DataBinding