Android Data Binding 入门
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 入门相关推荐
- android如何数据刷新,android Data Binding(02 数据刷新)
android Data Binding(01 入门篇) https://www.jianshu.com/p/7a9ddf4f1301 android Data Binding(02 数据刷新) ht ...
- Android Data Binding 详细介绍与使用
构建环境 首先,确保能使用Data Binding,需要下载最新的 Support repository.否则可能报错,如图: 在模块的build.gradle文件中添加dataBinding配置 a ...
- Android Data Binding Library 官方文档(译)
地址:https://developer.android.google.cn/topic/libraries/data-binding/index.html 本文地址:http://blog.csdn ...
- android -------- Data Binding的使用 ( 四 )ListView
今天来说说DataBinding在列表ListView中的使用 主要分为两种,1: 基本的实体类 2:Observable 定义字段 listView布局文件 <?xml version=&q ...
- android data binding jetpack III 绑定一个方法
第三篇 给view绑定一下方法响应. (补充:1.被绑定的方法必须是public的. 1.绑定方法可以用主语法.也可以用以下双冒号方式"::" android:onClick= ...
- Android开发教程 - 使用Data Binding(二)集成与配置
本系列目录 使用Data Binding(一)介绍 使用Data Binding(二)集成与配置 使用Data Binding(三)在Activity中的使用 使用Data Binding(四)在Fr ...
- android 高级项目,从零开始的Android新项目8 - Data Binding高级篇
承接上篇,本篇继续讲解一些Data Binding更加进阶的内容,包括:列表绑定.自定义属性.双向绑定.表达式链.Lambda表达式.动画.Component注入(测试)等. 列表绑定 App中经常用 ...
- Data Binding 用户指南(Android)
1. 介绍 这篇文章介绍了如何使用Data Binding库来写声明的layouts文件,并且用最少的代码来绑定你的app逻辑和layouts文件. Data Binding库不仅灵活而且广泛兼容- ...
- Android SELinux开发入门指南之正确姿势解决访问data目录权限问题
Android SELinux开发入门指南之正确姿势解决访问data目录权限问题 Android SELinux开发多场景实战指南目录: Android SELinux开发入门指南之SELinux ...
最新文章
- linux配置中心自动化,centos下搭建git服务 基于git服务配置自动化部署 遇到的Linux知识补充...
- 有关弹窗页面的注意问题
- 入门机器学习,看这些材料就够了
- Qt修炼手册7_图形:用户自定义QGraphicsItem
- Codeforces 264B Good Sequences ★ (分解素因子+DP)
- 不可多得的Javascript(AJAX)开发工具 - Aptana
- 机器学习(五)——SVM(3)
- mysql数据库存储引擎和索引的描述_Mysql InnoDB引擎的索引与存储结构详解
- Odoo免费开源企业信息化平台助力企业成功
- mongodb python 大于_5、Python操作MongoDB
- oracle declare语法_基于oracle数据库存储过程的创建及调用
- 迪斯尼:我们根本没被黑 整件事实际上是一场骗局
- 材料学真的没前途吗?
- python游戏对象_python基础----以面向对象的思想编写游戏技能系统
- 批量下载USGS的遥感影像
- 高速内部总线HSIB和设备总线DB
- 机器人编程语言有哪些? 这5大编程语言的优缺点你都了解?
- 深度学习基础知识点归纳总结
- Watts S. Humphrey:软件质量之父
- python中的进度条tqdm模块, 让进度可视
热门文章
- Qt(C++)项目中使用 Basler 工业相机(图像获取策略)
- 反射是否真的会让你的程序性能降低
- ssh备考-07 搭建spring框架环境
- stm32f103c8t6用什么语言编程,STM32F103ZET6和STM32F103C8T6编程不一样吗
- 一个啼笑皆非的发现-关于COREDRAW2018打印尺寸不准
- 迈拓网络硬盘软件全攻略(5)mldonkey
- 学习笔记(12):C#急速入门-数学运算符(加减乘除余)
- EPLAN多线原理图添加电气符号,并生成设备列表和部件汇总表
- SPI全双工通信解读和调试问题分析汇总
- linux怎么设置ie内核,怎么把易语言内核IE版本改成本地的内核版本!!