当前位置: 首页 > news >正文

Jetpack架构组件_4. 数据绑定库页面传递数据

        本篇介绍数据源从activity_main(1级页面)传递给include布局(2级页面)。

1.实现步骤

      step1.修改build.gradle文件

        修改app模块下的build.gradle文件,增加如下内容:

    dataBinding {enabled = true}

         step2.创建模型类User类。

package com.gaoting.databindingtosecondpage;public class User {public String userName;public String password;
}

         step3.修改activity_main.xml 布局文件

         在<data>标签页下面创建变量user。

<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"><data><variablename="user"type="com.gaoting.databindingtosecondpage.User" /></data><LinearLayoutandroid:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"tools:context=".MainActivity"><TextViewandroid:layout_margin="30dp"android:text="我是1级页面"android:layout_width="wrap_content"android:layout_height="wrap_content" /><EditTextandroid:layout_margin="30dp"android:text="@{user.userName}"android:id="@+id/edtUserName"android:layout_width="wrap_content"android:layout_height="wrap_content"android:hint="请输入用户名!" /><EditTextandroid:layout_margin="30dp"android:text="@{user.password}"android:id="@+id/edtPassword"android:layout_width="wrap_content"android:layout_height="wrap_content"android:hint="请输入密码!" /></LinearLayout>
</layout>

         在MainActivity中使用ActivityMainBingding对象就可以操控UI控件。

package com.gaoting.databindingtosecondpage;import android.os.Bundle;import androidx.activity.EdgeToEdge;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.graphics.Insets;
import androidx.core.view.ViewCompat;
import androidx.core.view.WindowInsetsCompat;
import androidx.databinding.DataBindingUtil;import com.gaoting.databindingtosecondpage.databinding.ActivityMainBinding;public class MainActivity extends AppCompatActivity {ActivityMainBinding activityMainBinding;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);activityMainBinding = DataBindingUtil.setContentView(this,R.layout.activity_main);User user = new User();user.userName="gaoting";user.password="123456";activityMainBinding.setUser(user);}
}

         step4.创建second_include.xml布局文件

        创建second_include.xml布局文件,把XML布局文件转换为DataBinding可以识别和绑定的布局文件。(选中根节点LinearLayout,按Alt+Enter弹出快捷菜单Convert to data binding layout。),在<data>节点下要引入变量user,代码如下:

<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"><data><variablename="user"type="com.gaoting.databindingtosecondpage.User" /></data><LinearLayoutandroid:orientation="vertical"android:layout_width="match_parent"android:layout_height="wrap_content"><TextViewandroid:layout_margin="30dp"android:text="我是二级页面"android:layout_width="wrap_content"android:layout_height="wrap_content" /><EditTextandroid:layout_margin="30dp"android:text="@{user.userName}"android:id="@+id/edtUserName"android:layout_width="wrap_content"android:layout_height="wrap_content"android:hint="请输入用户名!" /><EditTextandroid:layout_margin="30dp"android:text="@{user.password}"android:id="@+id/edtPassword"android:layout_width="wrap_content"android:layout_height="wrap_content"android:hint="请输入密码!" /></LinearLayout>
</layout>

         step5.关键步骤,引入app命名空间

        引入app命名空间xmlns:app="http://schemas.android.com/apk/res-auto",然后把1级界面定义的变量传递给2级页面。方法如下:

        <include layout="@layout/second_include" app:user="@{user}">  

         【注】include的用法:在开发Android布局时,我们常将一些通用的视图提取到一个单独的layout文件中,然后使用标签在需要使用的其他layout布局文件中加载进来,比如我们自己App导航栏等。这样,便于对相同视图内容进行统一的控制管理,提高布局重用性。 

    <LinearLayoutandroid:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"tools:context=".MainActivity"><include layout="@layout/second_include"app:user="@{user}"></include>

2.代码示例

        完整的代码如下:

        1)activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"xmlns:app="http://schemas.android.com/apk/res-auto"><data><variablename="user"type="com.gaoting.databindingtosecondpage.User" /></data><LinearLayoutandroid:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"tools:context=".MainActivity"><include layout="@layout/second_include"app:user="@{user}"></include><TextViewandroid:layout_margin="30dp"android:text="我是1级页面"android:layout_width="wrap_content"android:layout_height="wrap_content" /><EditTextandroid:layout_margin="30dp"android:text="@{user.userName}"android:id="@+id/edtUserName"android:layout_width="wrap_content"android:layout_height="wrap_content"android:hint="请输入用户名!" /><EditTextandroid:layout_margin="30dp"android:text="@{user.password}"android:id="@+id/edtPassword"android:layout_width="wrap_content"android:layout_height="wrap_content"android:hint="请输入密码!" /></LinearLayout>
</layout>

        2)second_include.xml

<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"><data><variablename="user"type="com.gaoting.databindingtosecondpage.User" /></data><LinearLayoutandroid:orientation="vertical"android:layout_width="match_parent"android:layout_height="wrap_content"><TextViewandroid:layout_margin="30dp"android:text="我是二级页面"android:layout_width="wrap_content"android:layout_height="wrap_content" /><EditTextandroid:layout_margin="30dp"android:text="@{user.userName}"android:id="@+id/edtUserName"android:layout_width="wrap_content"android:layout_height="wrap_content"android:hint="请输入用户名!" /><EditTextandroid:layout_margin="30dp"android:text="@{user.password}"android:id="@+id/edtPassword"android:layout_width="wrap_content"android:layout_height="wrap_content"android:hint="请输入密码!" /></LinearLayout>
</layout>

        3)MainActivity.java

package com.gaoting.databindingtosecondpage;import android.os.Bundle;import androidx.activity.EdgeToEdge;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.graphics.Insets;
import androidx.core.view.ViewCompat;
import androidx.core.view.WindowInsetsCompat;
import androidx.databinding.DataBindingUtil;import com.gaoting.databindingtosecondpage.databinding.ActivityMainBinding;public class MainActivity extends AppCompatActivity {ActivityMainBinding activityMainBinding;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);activityMainBinding = DataBindingUtil.setContentView(this,R.layout.activity_main);User user = new User();user.userName="gaoting";user.password="123456";activityMainBinding.setUser(user);}
}

        4)User.java

package com.gaoting.databindingtosecondpage;public class User {public String userName;public String password;
}
        UI控件:

相关文章:

  • ChatGPT成知名度最高生成式AI产品,使用频率却不高
  • Java项目:94 springboot大学城水电管理系统
  • (7)svelte 教程: Props(属性)
  • 【Linux系统编程】冯诺依曼体系、操作系统、进程的认识
  • 视频汇聚EasyCVR视频监控云平台对接GA/T 1400视图库对象和对象集合XMLSchema描述
  • selenium中, quit 和close的区别
  • 前端作用域冲突之快照沙箱和代理沙箱
  • leetcode:最近的请求次数
  • Vue可视化表单设计 FcDesigner v3.1.0 发布,新增 12 个组件,支持事件配置等
  • Java项目:96 springboot精品在线试题库系统
  • preventDefault()与stopPropagation()有什么区别?
  • IGraph使用实例——线性代数计算(blas)
  • 强达电路营收下滑净利润急剧放缓:周转率骤降,2次因环保被罚
  • 初识SDN(二)
  • 弘君资本:存储芯片概念强势,西测测试三连板,佰维存储涨超10%
  • 【译】JS基础算法脚本:字符串结尾
  • [nginx文档翻译系列] 控制nginx
  • 【面试系列】之二:关于js原型
  • 230. Kth Smallest Element in a BST
  • 8年软件测试工程师感悟——写给还在迷茫中的朋友
  • CEF与代理
  • GraphQL学习过程应该是这样的
  • HTTP 简介
  • leetcode378. Kth Smallest Element in a Sorted Matrix
  • react-core-image-upload 一款轻量级图片上传裁剪插件
  • select2 取值 遍历 设置默认值
  • SQL 难点解决:记录的引用
  • 产品三维模型在线预览
  • 给初学者:JavaScript 中数组操作注意点
  • 工作手记之html2canvas使用概述
  • 关于for循环的简单归纳
  • 官方新出的 Kotlin 扩展库 KTX,到底帮你干了什么?
  • 盘点那些不知名却常用的 Git 操作
  • 使用 5W1H 写出高可读的 Git Commit Message
  • 问题之ssh中Host key verification failed的解决
  • 以太坊客户端Geth命令参数详解
  • 与 ConTeXt MkIV 官方文档的接驳
  • Mac 上flink的安装与启动
  • 阿里云服务器如何修改远程端口?
  • 如何在招聘中考核.NET架构师
  • ​一、什么是射频识别?二、射频识别系统组成及工作原理三、射频识别系统分类四、RFID与物联网​
  • # dbt source dbt source freshness命令详解
  • $ git push -u origin master 推送到远程库出错
  • (1)(1.13) SiK无线电高级配置(五)
  • (C)一些题4
  • (react踩过的坑)antd 如何同时获取一个select 的value和 label值
  • (Spark3.2.0)Spark SQL 初探: 使用大数据分析2000万KF数据
  • (附程序)AD采集中的10种经典软件滤波程序优缺点分析
  • (附源码)springboot 校园学生兼职系统 毕业设计 742122
  • (附源码)springboot社区居家养老互助服务管理平台 毕业设计 062027
  • (免费领源码)python+django+mysql线上兼职平台系统83320-计算机毕业设计项目选题推荐
  • (七)Activiti-modeler中文支持
  • (三分钟)速览传统边缘检测算子
  • (四)进入MySQL 【事务】
  • (详细版)Vary: Scaling up the Vision Vocabulary for Large Vision-Language Models