Android Data Binding 入门

  • 参考

    http://www.cnblogs.com/lizebo/p/5474366.html

  • 配置环境 build.gradle

android {......// dataBinding 加入dataBinding {enabled = true}......
}
  • 布局文件

    最外层根节点变为==layout==,新增节点==data==用来存放页面可能用的数据以及方法

<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"><!--<data class=""><import type="com.smq.databanding.User" /><variablename="aaa"type="User" /></data>--><RelativeLayout
        android:id="@+id/activity_main"android:layout_width="match_parent"android:layout_height="match_parent""><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="Hello World!" /></RelativeLayout></layout>
  • 默认生成规则

根据layout的文件名来生成对应的Binding类,例如==R.layout.activity_main==对应生成的类名为==ActivityMainBinding==。自动生成的类在build目录下,as中不可见。

  • Variable和import

这两个标签是在layout资源文件中data标签的下级标签,其中variable标签可以独自使用,其独自使用方法如下:

<data><variable name="user" type="com.smq.databanding.User" />
</data>

其中name对应的字段会在具体view控件赋值时用到,type字段对应值是具体引用的类的全路径。

variable和import方法联合使用方法如下:

<data><import type="com.smq.databanding.User"/><variable name="user" type="User" />
</data>

多个路径类名相同的解决方法

<import type="com.example.home.data.User" />
<import type="com.examle.detail.data.User" alias="DetailUser" />
<variable name="user" type="DetailUser" />

绑定variable

当设置了variable标签后,框架会自动生成一个继承自ViewDataBinding的类,如果data中有class属性,比如

<data class="com.smq.databanding.CustomBinding" ><import  alias="User2"  type="com.smq.databanding.User" /><variable name="user" type="User2" />
</data>

则生成的类名为CustomBinding,否则就根据layout的文件名来生成对应的Binding类,例如R.layout.activity_main对应生成的类名为ActivityMainBinding。自动生成的类在build目录下,as中不可见。

  • 具体在Activity中的绑定方法如下
public class MainActivity extends AppCompatActivity {//MainBanding dataBinding;ActivityMainBinding dataBinding;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);//setContentView(R.layout.activity_main);dataBinding = DataBindingUtil.setContentView(this, R.layout.activity_main);init();}private void init() {dataBinding.setUser(new User("zhangfei", 18));}
}
  • 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"><data><import alias="User2" type="com.smq.databanding.User" /><variable name="user" type="User2" /></data><RelativeLayout
        android:id="@+id/activity_main"android:layout_width="match_parent"android:layout_height="match_parent"><TextView
            android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="@{user.name + user.age}" /></RelativeLayout>
</layout>
  • java类静态方法的使用
    首先定义一个静态方法
public class MyStringUtils {public static String capitalize(final String word) {if (word.length() > 1) {return String.valueOf(word.charAt(0)).toUpperCase() + word.substring(1);}return word;}
}

然后在 xml 的 data 节点中导入:

<import type="com.liangfeizc.databindingsamples.utils.MyStringUtils" />

使用方法与 Java 语法一样:

<TextView
    android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="@{MyStringUtils.capitalize(user.firstName)}" />

Android Data Binding 入门相关推荐

  1. android如何数据刷新,android Data Binding(02 数据刷新)

    android Data Binding(01 入门篇) https://www.jianshu.com/p/7a9ddf4f1301 android Data Binding(02 数据刷新) ht ...

  2. Android Data Binding 详细介绍与使用

    构建环境 首先,确保能使用Data Binding,需要下载最新的 Support repository.否则可能报错,如图: 在模块的build.gradle文件中添加dataBinding配置 a ...

  3. Android Data Binding Library 官方文档(译)

    地址:https://developer.android.google.cn/topic/libraries/data-binding/index.html 本文地址:http://blog.csdn ...

  4. android -------- Data Binding的使用 ( 四 )ListView

    今天来说说DataBinding在列表ListView中的使用 主要分为两种,1: 基本的实体类  2:Observable 定义字段 listView布局文件 <?xml version=&q ...

  5. android data binding jetpack III 绑定一个方法

    第三篇 给view绑定一下方法响应. (补充:1.被绑定的方法必须是public的.   1.绑定方法可以用主语法.也可以用以下双冒号方式"::" android:onClick= ...

  6. Android开发教程 - 使用Data Binding(二)集成与配置

    本系列目录 使用Data Binding(一)介绍 使用Data Binding(二)集成与配置 使用Data Binding(三)在Activity中的使用 使用Data Binding(四)在Fr ...

  7. android 高级项目,从零开始的Android新项目8 - Data Binding高级篇

    承接上篇,本篇继续讲解一些Data Binding更加进阶的内容,包括:列表绑定.自定义属性.双向绑定.表达式链.Lambda表达式.动画.Component注入(测试)等. 列表绑定 App中经常用 ...

  8. Data Binding 用户指南(Android)

    1. 介绍 这篇文章介绍了如何使用Data Binding库来写声明的layouts文件,并且用最少的代码来绑定你的app逻辑和layouts文件. Data Binding库不仅灵活而且广泛兼容- ...

  9. Android SELinux开发入门指南之正确姿势解决访问data目录权限问题

      Android SELinux开发入门指南之正确姿势解决访问data目录权限问题 Android SELinux开发多场景实战指南目录: Android SELinux开发入门指南之SELinux ...

最新文章

  1. linux配置中心自动化,centos下搭建git服务 基于git服务配置自动化部署 遇到的Linux知识补充...
  2. 有关弹窗页面的注意问题
  3. 入门机器学习,看这些材料就够了
  4. Qt修炼手册7_图形:用户自定义QGraphicsItem
  5. Codeforces 264B Good Sequences ★ (分解素因子+DP)
  6. 不可多得的Javascript(AJAX)开发工具 - Aptana
  7. 机器学习(五)——SVM(3)
  8. mysql数据库存储引擎和索引的描述_Mysql InnoDB引擎的索引与存储结构详解
  9. Odoo免费开源企业信息化平台助力企业成功
  10. mongodb python 大于_5、Python操作MongoDB
  11. oracle declare语法_基于oracle数据库存储过程的创建及调用
  12. 迪斯尼:我们根本没被黑 整件事实际上是一场骗局
  13. 材料学真的没前途吗?
  14. python游戏对象_python基础----以面向对象的思想编写游戏技能系统
  15. 批量下载USGS的遥感影像
  16. 高速内部总线HSIB和设备总线DB
  17. 机器人编程语言有哪些? 这5大编程语言的优缺点你都了解?
  18. 深度学习基础知识点归纳总结
  19. Watts S. Humphrey:软件质量之父
  20. python中的进度条tqdm模块, 让进度可视

热门文章

  1. Qt(C++)项目中使用 Basler 工业相机(图像获取策略)
  2. 反射是否真的会让你的程序性能降低
  3. ssh备考-07 搭建spring框架环境
  4. stm32f103c8t6用什么语言编程,STM32F103ZET6和STM32F103C8T6编程不一样吗
  5. 一个啼笑皆非的发现-关于COREDRAW2018打印尺寸不准
  6. 迈拓网络硬盘软件全攻略(5)mldonkey
  7. 学习笔记(12):C#急速入门-数学运算符(加减乘除余)
  8. EPLAN多线原理图添加电气符号,并生成设备列表和部件汇总表
  9. SPI全双工通信解读和调试问题分析汇总
  10. linux怎么设置ie内核,怎么把易语言内核IE版本改成本地的内核版本!!