android data binding

news/2024/5/20 1:39:25 标签: 数据, binding, android, gradle

使用 android数据绑定库,可以编写声明式布局,减少应用程序逻辑和布局之间的粘合代码。数据绑定库可以兼容到android 2.2。
数据绑定库要求使用 gradle 1.5 或者gradle更高的版本。数据绑定库目前还处于 beta 版本阶段,这意味着以后发布正式版的时候,使用方法可能发生比较大的修改。可惜目前只支持单向数据绑定(所以不想看了。。。,等支持双向了再说吧),只支持单向,写起来比用 ButterKnife + ButterKnifeZelezny 要麻烦。

使用步骤:
1. 开启数据绑定配置
2. 在 layout 文件中绑定数据
3. 在 java 代码中获取到绑定的数据对象,设置对象的数据

  • 开启数据绑定配置,在使用数据绑定的 app module 的 build.gradle 中添加下面代码片段
android {
    ....
    dataBinding {
        enabled = true
    }
}
  • 在 layout 文件中绑定数据,为了在 layout 文件中使用数据绑定,增加了新的标签 layout 和 data,根标签必须使用 layout。下面包含 data 元素和 view 的根元素。view元素就是未使用数据绑定前的 layout 文件。
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">
   <data>
       <variable name="user" type="com.example.User"/>
   </data>
   <LinearLayout
       android:orientation="vertical"
       android:layout_width="match_parent"
       android:layout_height="match_parent">
       <TextView android:layout_width="wrap_content"
           android:layout_height="wrap_content"
           android:text="@{user.firstName}"/>
       <TextView android:layout_width="wrap_content"
           android:layout_height="wrap_content"
           android:text="@{user.lastName}"/>
   </LinearLayout>
</layout>

使用 < variable name=”user” type=”com.example.User”/> 声明一个变量 com.example.User 类型的变量 user。
使用@{user.lastName} 使用变量 user 的属性值。
User 类中的字段通常不会改变。比如下面两种情况

public class User {
   public final String firstName;
   public final String lastName;
   public User(String firstName, String lastName) {
       this.firstName = firstName;
       this.lastName = lastName;
   }
}
public class User {
   private final String firstName;
   private final String lastName;
   public User(String firstName, String lastName) {
       this.firstName = firstName;
       this.lastName = lastName;
   }
   public String getFirstName() {
       return this.firstName;
   }
   public String getLastName() {
       return this.lastName;
   }
}
  • 获取绑定的数据对象,设置对象的数据,在 activity 中使用下面的代码设置绑定的数据
@Override
protected void onCreate(Bundle savedInstanceState) {
   super.onCreate(savedInstanceState);
   MainActivityBinding binding = DataBindingUtil.setContentView(this, R.layout.main_activity);
   User user = new User("Test", "User");
   binding.setUser(user);
}

参考:
https://developer.android.com/tools/data-binding/guide.html
https://github.com/LyndonChin/MasteringAndroidDataBinding


http://www.niftyadmin.cn/n/1869859.html

相关文章

Fragment 操作原理

fragment 本质 fragment 本质上是 view 的容器和控制器&#xff0c;fragment 是 activity 的碎片。 activity 是什么呢&#xff1f;activity 是四大组件之一&#xff0c;4大组件是 android 系统的组成部件&#xff0c;因为 LMK(Low Memery Killer)机制&#xff0c;4 大组件就…

View 的 OverScrollBy 方法

在 AbsListView、HorizontalScrollView、ScrollView 的 onTouchEvent 中判断是否到达边界(顶部 或 底部) ,然后调 view.overScrollBy ,传入 scrollX、scrollY 等参数overScrollBy 最终赋值给View的 mScrollX, mScrollY 两个变量 在AbsListView中调用完overScrollBy之后,调用inv…

Fragment 使用总结

MVP 模式中有没有必要使用 Fragment&#xff1f;Fragment 是 Activity 的碎片&#xff0c;Activity 相当于 View 那么 Fragment 也相当于 View 了&#xff0c;请问使用 Fragment 和纯粹使用 ViewGroup 相比较有什么优势&#xff1f; 问题总结敬请期待……

android View 系统 touch 事件处理

这篇文章总结一下 android View 系统 touch 事件处理&#xff0c;View 系统对 touch 事件的处理包含两部分 1. View 对 touch 事件的处理 2. ViewGroup 对 touch 事件的处理 除了上述两点&#xff0c;touch 事件的处理还有一个很重要的知识点就是 touch 事件的分发&#xff…

Volley 源码分析

Volley 源码分析 http 网络请求到底是怎么发送http 网络请求的响应是怎么分发Volley 中关键的类之间的关系 关键的类&#xff1a; Volley、RequestQueue、StringRequest、CacheDispatcher、NetworkDispatcher、NetWork&#xff0d;BasicNetwork、HttpStack&#xff0d;HttpC…

Multidex 打包包含JNI引用问题

出现这种错误&#xff1a; java.lang.UnsatisfiedLinkError:dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/com.myapp/base.apk"],nativeLibraryDirectories[/data/app/com.myapp/lib/arm64, /vendor/lib64, /system/lib64]]] couldnt find &quo…

计算机进行浮点型运算为什么会造成精度丢失

现在我们就详细剖析一下浮点型运算为什么会造成精度丢失&#xff1f; 1、小数的二进制表示问题 首先我们要搞清楚下面两个问题&#xff1a; (1) 十进制整数如何转化为二进制数 二进制整数 1111 第一位1表示十进制1 第二位1表示十进制2 第三位1表示十进制4 第四位1表示十进…

django.core.exceptions.ImproperlyConfigured 异常

使用 PyCharm 启动 Django 项目报如下异常&#xff1a;django.core.exceptions.ImproperlyConfigured: Requested settings, but settings are not configured. You must either define the environment variable DJANGO_SETTINGS_MODULE or call settings.configure() before …