zoukankan      html  css  js  c++  java
  • Android开发教程

    本系列目录

    前面我们讲到了Data Binding在Activity中的使用在Fragment中的使用,在两者的布局文件中,都可以绑定数据(对象),本篇文章我们就来介绍数据的绑定。

    <data>标签

    在这个标签中,我们通常用来做下面的事情:

    • 定义所绑定的数据的名称(变量名)及对应类型
    • 引入页面所需的类

    示例如下:

    <data>
        <import type="android.view.View" />
        <import type="android.text.TextUtils" />
        
        <variable name="visible" type="boolean"/>
        <variable name="title" type="String"/>
        <variable name="user" type="cn.examplecode.androiddatabinding.User"/>
    </data>
    

    其中"<import/>"标签表示引入一个类,比如上例中引入了View类和一个工具类TextUtils,当然也可以引入你自己的类,比如常量类或者工具类。

    下面"<variable/>"标签定义了本页面所需要的各种数据名称或类型,其类型可以是java中的基础类型,或者自定义的类。

    设置数据

    上面定义了页面中所需要的数据后,下面就需要通过获取到的Binding对象设置这些数据:

    mBinding.setVisible(true);
    mBinding.setTitle("用户信息");
    User user = new User();
    user.setName("Steve Jobs");
    mBinding.setUser(user);
    

    这里的setXXX()方法也是IDE自动根据<data>标签中的定义自动生成的。

    如果写代码过程中发现IDE并没有自动正确生成对应的setXXX()方法,则参考这篇文章:Android Data Binding没有正常生成相关类/方法的解决办法,仅需几步操作即可使IDE正常生成。

    在布局中使用这些数据

    数据设置完毕以后就可以在页面中使用这些数据了,使用起来也非常方便,比起在java代码中操作,可以省去不少代码。

    <TextView
        android:id="@+id/tv_title"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@{title}"
        android:visibility="@{visible ? View.VISIBLE : View.GONE}"
        />
        
    <TextView
        android:id="@+id/tv_username"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@{user.name}"
        />    
    

    请注意上面的代码:

    android:text="@{title}"
    

    这一行是设置变量"title"的值到TextView中。

    android:visibility="@{visible ? View.VISIBLE : View.GONE}"
    

    这一行是根据变量"visible"的值来控制该TextView的显示与否,注意这里需要在<data>标签中引入android.view.View类,来使用View中的VISIBLE和GONE常量,这里可以使用问号表达式来判断。

    android:text="@{user.name}"
    

    user是一个自定义对象,user.name意思是取user对象中的name的值。

    User定义如下,注意必须设置getter/setter:

    public class User {
    
        private String name;
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    }
    

    根据View获取Binding

    经过前面的学习,我们可以很方便地从数据绑定对象(Binding) 中获取到其绑定的View,但是我们会碰到一些应用场景,比如我们在操作View的时候,需要取得其绑定的Binding对象,以获取到当前View中的子View的引用,从而避免类似findViewById()这样的操作,并且也可以获取到当前View所绑定的数据。

    那么该如何从View获取当前绑定的Binding对象呢?

    其实很简单,DataBindingUtil就提供了这样的方法,举例如下:

    UserBinding userBinding = DataBindingUtil.getBinding(userView);
    

    总结

    通过本篇文章相信你已经了解如何将数据与View进行绑定,这是Data Binding的核心,也是MVVM架构模式的基础,这里介绍的是比较简单的绑定,后面我们将介绍更加深入的使用,使用这些技术后就会发现Data Binding的强大和高效率。

    如有更多疑问,请参考我的其它Android相关博客:我的博客地址

  • 相关阅读:
    Web 性能优化
    js 校验身份证
    html5 输入框响应enter按键
    获取浏览器的可视窗口宽高
    js打开新标签
    Java数据脱敏框架
    Spring Boot中的事务管理
    运维监控知识体系
    git常用命令图解 & 常见错误
    安全团队不可错过的七个云安全开源工具(转载)
  • 原文地址:https://www.cnblogs.com/lloyd-zh/p/9793196.html
Copyright © 2011-2022 走看看