PS:数据绑定,顾名思义是数据与一些控件或者用户账号等绑定,这样用的好处是便于管理。代码清晰,量少。

  • 首先要了解什么是数据绑定?
  • 为什么要用数据绑定?
  • 怎么用数据绑定?
    •   语法的使用

简单例子,数据绑定textview控件,一般情况下我们都是些一个布局文件,然后布局文件里放一些textview,然后通过Activity来findviewbyid来获取id,然后对象.setText("")。现在我们学了数据绑定,就可以不用之前的方法了。

把库加载进来:因为这个东西是网上的东西需要我们下载。

 dataBinding{
enabled true
}

1:首先写一个布局文件databinding.xml,这个名字可以随便起,但是在后面要用到该名字。

这里要说明一点,我们先创建一个java文件,作为model,只有setget方法。

Users.java

package databinding;

public class Users {

    public  String name,address,email;
private boolean vip; public boolean isVip() {
return vip;
} public void setVip(boolean vip) {
this.vip = vip;
} public String getAddress() {
return address;
} public void setAddress(String address) {
this.address = address;
} public String getEmail() {
return email;
} public void setEmail(String email) {
this.email = email;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
}
}

我们可以看出下面的布局文件和之前的不一样,我们首先要写的是layout,这个layout和我们之前用到的LinearLayout不一样,这个仅仅是为了把类加载进来。

<layout xmlns:android="http://schemas.android.com/apk/res/android">,然后data是加载Users类路径,name是给他起个代号。然后TextView赋值是@{user.name},现在布局文件是写好了,但是没有任何值,所有的值都是在Activity中写。
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">
<data>
<variable
name="user"
type="databinding.Users"></variable>
</data>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"> <TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textColor="@{user.vip ? 0xffff00ff:0xff000000}"
android:text="@{user.name}"
android:textSize="25dp" /> <TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@{user.address}"
android:textSize="25dp" /> <TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@{user.email}"
android:textSize="25dp" />
</LinearLayout>
</layout>

2:DataBActivity.java

我们可以看到加载布局方法还是setContentView,只是对象变了,DatabindingBinding这个类是不是很熟悉,它就是我们之前创建databinding.xml的时候自动创建的类,生成模式是xml文件名字(首字母大写)+Binding。

        //DatabindingBing该类是自动生成的,是xml文件名字(首字母大写)+Binding
DatabindingBinding databindingBing=DataBindingUtil.setContentView(this, R.layout.databinding);
Users users=new Users();
users.setName("李四");
users.setAddress("北京");
users.setEmail("1245334@163.com");
users.setVip(true);
databindingBing.setUser(users);

运行结果:

ok,现在都出来了,我们还有可能会在上面做一些其他的操作,比如说,李四前面加一个用户名,北京前面加一个地址,这就是字符串的拼接,此拼接和以往的有些不同,如:

<!--
1:在@{}中可以拼接字符串,要求是双引号里只能用该形式 `ceshi`,但单引号里可以用双引号。
"@{user.name + `(` +user.address + `)`}"
2:@{}里可以做一些简单的判断,可以用赋值、判断等
(1)@{user.name == null ? user.address : user.name}//如果是null的话,就显示user.address
(2)@{user.name ?? user.address}//如果user.name不为null就显示,为null就显示user.address
(3)@{}在做比较的时候 可以用转义 如< &lt; 大于> &rt; -->
------------------------------------------

这样做同样是可以显示左边是用户名,右边是用张三。数据绑定也是可以实现这样的效果,只要左边一个布局,右边一个布局就可以了,而且用的都是同一个user布局,只是加载两遍,数据是按照list方式传入,数据绑定的好处有很多,比如说:listview中的点击事件,对于item的点击就不说了,难点一般都是item里的一个小控件,我们往往就还要再写接口等用回调的方法证明它被点击了,而这个数据绑定就简单了,直接加上name,那么你点击的是哪一个用户名就会显示出来,下面写一写代码来捋一捋思路,具体写法如下:
这个和上面代码有很多一样的地方,但为了方便你们看,我重新粘贴一遍
  • 首先还是写一个model类Users,这里面我加上了点击事件,获取上下文用view.getContext()。
  • 与Users对应的user_layout.xml文件
  • 一个总得xml文件,用来加载两列user_layout文件
  • Activity中加载数据

1:首先还是写一个model类Users,这里面我加上了点击事件,获取上下文用view.getContext()。

package databinding;
import android.view.View;
import android.widget.Toast;
public class Users {
public String name,address,email;
private boolean vip;
public boolean isVip() {
return vip;
}
public void setVip(boolean vip) {
this.vip = vip;
}
public String getAddress() {
return address;
} public void setAddress(String address) {
this.address = address;
} public String getEmail() {
return email;
} public void setEmail(String email) {
this.email = email;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public void click1(View view){
Toast.makeText(view.getContext(), "点击了:"+name, Toast.LENGTH_SHORT).show();
}
public boolean longClick1(View view){
Toast.makeText(view.getContext(), "长按了:"+name, Toast.LENGTH_SHORT).show();
return true;
} }

2:与Users对应的user_layout.xml文件

android:onClick="@{ user.click1}"就是点击事件,需要注意的是click1是Users.java中的click1()方法,名字必须一样,长按点击也是如此。
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">
<data>
<variable
name="user"
type="databinding.Users"></variable>
</data>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"> <TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textColor="@{user.vip ? 0xffff00ff:0xff000000}"
android:onClick="@{ user.click1}"
android:text="@{user.name }"
android:textSize="25dp" /> <TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:onLongClick="@{ user.longClick1}"
android:text="@{user.address}"
android:textSize="25dp" /> <TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@{user.email}"
android:textSize="25dp" />
</LinearLayout>
</layout>

3:一个总得xml文件,用来加载两列user_layout文件

这里需要注意的是,因为我们将要传入list集合,所以在variable中type要改一下,类要加载进来,这就是规范。需要注意的是在List<Users>中的(<)符号是不能写的,要这样转义type="java.util.List&lt;Users&gt;    app:user="@{ users[0] }"是加载数据,如果你们打app:user什么都不出的话,就在布局最上头加上xmlns:app="http://schemas.android.com/apk/res-auto"即可。

<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<data>
<import type="databinding.Users"></import>
<variable
name="users"
type="java.util.List<Users>"></variable>
</data>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:orientation="horizontal">
<LinearLayout
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="match_parent"> <include
layout="@layout/user_layout" app:user="@{ users[0] }"></include>
</LinearLayout> <LinearLayout
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="match_parent"> <include
layout="@layout/user_layout" app:user="@{ users[1] }"></include>
</LinearLayout>
</LinearLayout>
</layout>

4:Activity中具体操作

 //DatabindingBing该类是自动生成的,是xml文件名字(首字母大写)+Binding
DatabindingBinding databindingBinding=DataBindingUtil.setContentView(this, R.layout.databinding);
Users users=new Users();
users.setName("用户名:");
users.setAddress("地址:");
users.setEmail("E-mail:");
users.setVip(true); Users users1=new Users();
users1.setName("李四");
users1.setAddress("北京");
users1.setEmail("1245334@163.com");
users1.setVip(true);
List<Users> list=new ArrayList<>();
list.add(users);
list.add(users1);
databindingBinding.setUsers(list);

这里还有一个问题,如果你是新写的java文件或者xml文件,那就没什么问题了,但如果你是接着第一个例子修改的,那就有可能报包路径什么找不到,这个也没事,只要再clean一下就好了,

Android数据绑定技术二,企业级开发

Android数据绑定技术一,企业级开发的更多相关文章

  1. Android数据绑定技术二,企业级开发

    PS:上一篇文章写了Databinding的简单使用,写了一个绑定textview的示例,和绑定的一些用法,估计有的人会说,之前的写的好好的,为什么要数据绑定这样的写法呢,没办法,社会在进步,当然是怎 ...

  2. 包建强的培训课程(1):Android App企业级开发

    @import url(http://i.cnblogs.com/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/c ...

  3. Android官方技术文档翻译——开发工具的构建概述

    本文译自Android官方技术文档<Build Overview>,原文地址:http://tools.android.com/build. 因为<Android Lint Chec ...

  4. Android NFC技术(三)——初次开发Android NFC你须知道NdefMessage和NdefRecord

    Android NFC技术(三)--初次开发Android NFC你须知道NdefMessage和NdefRecord 这最近也是有好多天没写博客了,除了到处张罗着搬家之外,依旧还是许许多多的琐事阻碍 ...

  5. 【第二版】高仿Android网易云音乐企业级项目实战课程介绍

    这是一门付费Android项目课程,我们只做付费课程:同时也感谢大家的支持. 这一节,对本课程做一个简单介绍,以及放一些项目效果图,如果想直接查看项目视频演示,可以直接在腾讯课堂查看[高仿Androi ...

  6. 第一章 Android系统移植与驱动开发概述

    本书第一章首先简单概要地介绍了关于Android系统移植和驱动开发的相关内容. 所谓“移植”是指为特定的自己的设备,如手机定制Android的过程.自己开发一些程序(移植)装载在设备上,使得Andro ...

  7. Android IOS WebRTC 音视频开发总结(八十五)-- 使用WebRTC广播网络摄像头视频(下)

    本文主要介绍WebRTC (我们翻译和整理的,译者:weizhenwei,校验:blacker),最早发表在[编风网] 支持原创,转载必须注明出处,欢迎关注我的微信公众号blacker(微信ID:bl ...

  8. Android IOS WebRTC 音视频开发总结(八十三)-- 使用WebRTC广播网络摄像头视频(上)

    本文主要介绍WebRTC (我们翻译和整理的,译者:weizhenwei,校验:blacker),最早发表在[编风网] 支持原创,转载必须注明出处,欢迎关注我的微信公众号blacker(微信ID:bl ...

  9. iOS企业级开发初级课程-表视图(13集)

    首先了解了表视图的组成.表视图类的构成.表视图的分类以及表视图的两个重要协议(委托协议和数据源协议),对表视图有了一个整体上的认识.接下来我们掌握了如何实现简单表视图和分节表视图,以及表视图中索引.搜 ...

随机推荐

  1. 反馈法学习设计模式(一)——策略模式Strategy Pattern

    简介(Introduction) 之前学习Java8实战时,遇到一个很好的策略模式示例.便想着借着这个示例结合反馈式的方法来,学习策略设计模式,也以便后面反复琢磨学习. 首先我们通过练习,逐步写出符合 ...

  2. 交换知识 VLAN VTP STP 单臂路由

    第1章 交换基础 1.1 园区网分层结构 层次 作用 出口层 广域网接入 出口策略 带宽控制 核心层 高速转发 服务器接入 路由选择 汇聚层 流量汇聚 链路冗余 设备冗余 路由选择 接入层 用户接入 ...

  3. 三目运算的使用&bytes类型转str类型

    一.三目运算的使用 就像c语言中有三目运算符一样,python中也有三目运算符,废话不多说直接上代码 a=3 c=4 b=a if a>c else c print(b) 意思就和 if a&g ...

  4. 0_Simple__matrixMul + 0_Simple__matrixMul_nvrtc

    矩阵乘法,使用一维线程块和共享内存.并且在静态代码和运行时编译两种条件下使用. ▶ 源代码:静态使用 #include <stdio.h> #include <assert.h> ...

  5. Python基础-变量定义-输出输入

    一.变量的定义 字母.数字.下划线组成,不能以数字开头,同时区分大小写 二.输出 print() print(,) 输出空格 input() 读取键盘输入

  6. 第三方软件内嵌IE出现纵向滚动条消失的BUG,奇葩的IE BUG 真是无奇不有

    混了这么久 竟然还有这样难以解决的BUG,最后都跑到英文的MSDN上提问了,因为谷歌都谷不出朕的忧伤了,有木有. 提问原文如下:https://social.msdn.microsoft.com/Fo ...

  7. Deploy .Net project automatically with MsBuild and MsDeploy (1)

    Q: How to change parameter values in configuration files dynamically In the first section http://www ...

  8. selenium元素定位

    在网页自动化测试中,我们要让程序自动模拟我们的点击.输入.悬浮.拖动等操作,完成我们的测试用例组. 输入.点击.打开这样的动词,已经包含在了selenium的方法中,可以直接调用(当然你也可以自己写) ...

  9. Maven 项目pom.xml报错

    Maven项目报 Failure to transfer org.apache.maven.plugins:maven-*-plugin:pom 原因是maven的plugin并未下载到本地 或者本地 ...

  10. Winform C# 简单实现子窗口显示进度条

    主窗口代码 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data ...