美文网首页Android架构AndroidAndroid Studio
Android中的Data Binding初探 (二)

Android中的Data Binding初探 (二)

作者: 阳春面 | 来源:发表于2015-07-08 00:29 被阅读165次

    本文接《Android中的Data Binding初探 (一)》

    数据绑定用法

    • import语法
    <data>
        <import type="android.view.View"/>
    </data>
    
    • 如果类名相同,可以起别名
    <import type="android.view.View"/>
    <import type="com.example.real.estate.View"
            alias="Vista"/>
    
    • import集合类型
    <data>
        <import type="com.example.User"/>
        <import type="java.util.List"/>
        <variable name="user" type="User"/>
        <variable name="userList" type="List<User>"/>
     </data>
    
    • 使用类静态方法
    <data>
        <import type="com.example.MyStringUtils"/>
        <variable name="user" type="com.example.User"/>
    </data>
    …
    <TextView
       android:text="@{MyStringUtils.capitalize(user.lastName)}"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"/>
    
    • 传递数据到Include layout
    <?xml version="1.0" encoding="utf-8"?>
    <layout xmlns:android="http://schemas.android.com/apk/res/android"
            xmlns:bind="http://schemas.android.com/apk/res-auto">
       <data>
           <variable name="user" type="com.example.User"/>
       </data>
       <LinearLayout
           android:orientation="vertical"
           android:layout_width="match_parent"
           android:layout_height="match_parent">
           <include layout="@layout/name"
               bind:user="@{user}"/>
           <include layout="@layout/contact"
               bind:user="@{user}"/>
       </LinearLayout>
    </layout>
    

    绑定表达式语法

    绑定表达式里的语法,基本上与Java语言里的相同

    • 支持语法
    Mathematical + - / * %
    String concatenation +
    Logical && ||
    Binary & | ^
    Unary + - ! ~
    Shift >> >>> <<
    Comparison == > < >= <=
    instanceof
    Grouping ()
    Literals - character, String, numeric, null
    Cast
    Method calls
    Field access
    Array access []
    Ternary operator ?:
    
    • 不支持语法
    this
    super
    new
    
    • 空指针处理
      表达式不会抛出空指针异常,对于空指针的访问都返回的是null,比如表达式@{user.name},
      user是null,访问user.name返回的也是null,不会抛出空指针异常

    • Null Coalescing操作符
      Null Coalescing操作符(??)会根据左右两侧是否是null进行选择,
      如果左侧的不为null,则选择左侧,为null选择右侧:

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

    等同于:

    android:text="@{user.displayName != null ? user.displayName : user.lastName}"
    
    • 访问集合类型
      集合类型中的元素可以使用[]符号来访问
    <data>
        <import type="android.util.SparseArray"/>
        <import type="java.util.Map"/>
        <import type="java.util.List"/>
        <variable name="list" type="List<String>"/>
        <variable name="sparse" type="SparseArray<String>"/>
        <variable name="map" type="Map<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]}"
    
    • 访问Resource
    android:padding="@{large? @dimen/largePadding : @dimen/smallPadding}"
    android:text="@{@string/nameFormat(firstName, lastName)}"
    android:text="@{@plurals/banana(bananaCount)}"
    

    本文参考谷歌官方的Data Binding Guide

    本文作者: 阳春面
    原文地址:http://www.aswifter.com/2015/07/08/android-data-binding-2/

    欢迎关注我的微信公众号,分享Android 开发,IOS开发,Swift开发和互联网内容
    微信号:APP开发者

    相关文章

      网友评论

        本文标题:Android中的Data Binding初探 (二)

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