美文网首页
DataBinding(03)-表达式

DataBinding(03)-表达式

作者: 代码多哥 | 来源:发表于2023-08-16 22:02 被阅读0次

表达式

1 一般用法

表达式语言看起来很像托管代码中的表达式。您可以在表达式语言中使用以下运算符和关键字:

  • 数学运算符 + - / * %
  • 字符串连接符 +
  • 逻辑运算法 && ||
  • 位运算符 & | ^
  • 一元运算符 + - ! ~
  • 位移运算符 >> >>> <<
  • 比较运算符 == > < >= <= (需要注意: < 需要编码为 <)
  • instanceof
  • 分组 ()
  • 直接常量 - 字符, 字符串, 数字, null
  • Cast
  • 方法调用
  • 属性访问
  • 数组访问 []
  • 三元运算符 ?:

示例:

android:text="@{String.valueOf(index + 1)}"
android:visibility="@{age > 13 ? View.GONE : View.VISIBLE}"
android:transitionName='@{"image_" + id}'

2 省略的操作

可以在托管代码中使用的表达式语法中省略一下操作:

  • this
  • super
  • new
  • Explicit generic invocation(显式泛型调用)

3 空合并运算符

如果左操作数不是null,则null合并运算符(??)选择左操作数;如果前者为null,则选择右操作数。

android:text="@{user.displayName ?? user.lastName}"

这在功能上等同于:

android:text="@{user.displayName != null ? user.displayName : user.lastName}"

4 属性引用

表达式可以使用以下格式引用类中的属性,这与字段、getter和ObservableField对象的格式相同:

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

5 避免空指针异常

生成的DataBinding代码会自动检查空值并避免出现空指针异常。例如,在表达式@{user.name}中,如果user为null,则为user.name指定其默认值null。如果引用user.age,其中age的类型为int,则数据绑定使用默认值0。

6 View引用

表达式可以使用以下语法按ID引用布局中的其他View:

android:text="@{exampleText.text}"

注意:绑定类将ID转换为驼峰大小写。
在以下示例中,TextView引用同一布局中的EditText:

<EditText
    android:id="@+id/example_text"
    android:layout_height="wrap_content"
    android:layout_width="match_parent"/>
<TextView
    android:id="@+id/example_output"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@{exampleText.text}"/>

7 集合运算

为了方便起见,可以使用[]运算符访问常见集合,如数组、列表、稀疏列表和Map。

<data>
    <import type="android.util.SparseArray"/>
    <import type="java.util.Map"/>
    <import type="java.util.List"/>
    <variable name="list" type="List&lt;String>"/>
    <variable name="sparse" type="SparseArray&lt;String>"/>
    <variable name="map" type="Map&lt;String, String>"/>
    <variable name="index" type="int"/>
    <variable name="key" type="String"/>
</data>
…
android:text="@{list[index]}"
…
android:text="@{sparse[index]}"
…
android:text="@{map[key]}"

注意:为了使XML在语法上正确,您必须转义<字符。例如:您必须将List<String>编写为List<String>。

您还可以使用object.key表示法引用Map中的值。例如,上面示例中的@{map[key]}可以替换为@{map.key}。

8 字符串字面量

可以使用单引号将属性值括起来,这样可以在表达式中使用双引号,如以下示例所示:

android:text='@{map["firstName"]}'

也可以使用双引号将属性值括起来。执行此操作时,字符串文字应该用后引号(`) 括起来`:

android:text="@{map[`firstName`]}"

9 引用资源

表达式可以使用以下语法引用应用程序资源:

android:padding="@{large? @dimen/largePadding : @dimen/smallPadding}"

您可以通过提供以下参数来计算格式字符串和复数:

android:text="@{@string/nameFormat(firstName, lastName)}"
android:text="@{@plurals/banana(bananaCount)}"

可以将属性引用和视图引用作为资源参数传递:

android:text="@{@string/example_resource(user.lastName, exampleText.text)}"

当复数包含多个参数时,必须传递所有参数:


  Have an orange
  Have %d oranges

android:text="@{@plurals/orange(orangeCount, orangeCount)}"

一些资源需要显式类型计算,如下表所示:

Type Normal reference Expression reference
String[] @array @stringArray
int[] @array @intArray
TypedArray @array @typedArray
Animator @animator @animator
StateListAnimator @animator @stateListAnimator
color int @color @color
ColorStateList @color @colorStateList

相关文章

  • DataBinding(四)属性设置

    1. 默认setter 对于设置了DataBinding表达式的XML属性,DataBinding会根据属性表达式...

  • [Android][DataBinding][DataBindi

    1.DataBinding对View的事件处理 DataBinding允许你为控件通过写表达式来传递事件,表达式必...

  • Data Binding Library—基本使用

    1.编译配置 在app模块的build.gradle增加dataBinding 2.Layouts 和绑定表达式(...

  • 正则初解

    title: js验证常用正则表达式date: 2017-03-03 验证 正则表达式 本文介绍js验证常用的正则...

  • MVVM架构篇之databinding源码解析

    databinding是google去年发布的一个库,它支持在xml中写表达式使得viewModel中的数据能够绑...

  • DataBinding(二)变量及表达式

    1. 概述 在DataBinding的布局文件当中,可以引入各种变量,并在布局文件中使用变量表达式,达到数据绑定的...

  • MVVM

    DataBinding基础用法 DataBinding入门 Android数据绑定框架DataBinding,堪称...

  • day15正则表达式

    01-正则表达式的符号 02-正则表达式符号组合 03-正则表达式 04-re模块方法

  • DataBinding

    dataBinding的使用 一、databinding的配置方法 二、databinding的基本使用 三、da...

  • DataBinding添加监听

    这章介绍DataBinding添加监听。如果不了解DataBinding的话,请查看[DataBinding的简单...

网友评论

      本文标题:DataBinding(03)-表达式

      本文链接:https://www.haomeiwen.com/subject/qvhhmdtx.html