首页 > 其他分享 >DataBinding开始使用以及布局详解

DataBinding开始使用以及布局详解

时间:2023-08-17 12:03:07浏览次数:42  
标签:绑定 String firstName 布局 详解 DataBinding 表达式

DataBinding 开始使用

了解如何为您的开发环境支持使用DataBinding,包括在Android Studio中支持数据绑定代码。

DataBinding提供了灵活性和广泛的兼容性-它是一个支持库,因此您可以将其用于运行Android 4.0(API 14级)或更高版本的设备。

我们建议在您的项目中使用最新的Android Gradle插件。但是,1.5.0及更高版本支持数据绑定。有关更多信息,请参阅如何update the Android Gradle plugin

构建环境

要开始使用DataBinding,请从Android SDK管理器中的支持库下载该库。有关更多信息,请参阅\[更新IDE和SDK工具\]

要将应用程序配置为使用数据绑定,请在应用程序模块的“build.gradle”文件中启用“dataBinding”构建选项,如以下示例所示:

android {
    ...
    buildFeatures {
        dataBinding true
    }
}

您必须为依赖于使用数据绑定的库的应用程序模块配置DataBinding,即使应用程序模块不直接使用DataBinding

Android Studio 对 data binding的支持

Android Studio支持数据绑定代码的许多编辑功能。例如,它支持数据绑定表达式的以下功能:

  • 语法高亮
  • 标记表达式语言语法错误
  • XML代码补全
  • 引用,包括导航(例如导航到声明)和快速文档

注意:数组和泛型类型(如Observable接口)可能会错误地显示错误。

布局编辑器中的“预览”窗格显示数据绑定表达式的默认值(如果提供)。例如,“预览”窗格在以下示例中声明的TextView小部件上显示my\_default值:

<TextView android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@{user.firstName, default=my_default}"/>

如果仅在项目的设计阶段需要显示默认值,则可以使用工具属性而不是默认表达式值,如“工具属性”参考中所述。

DataBinding 布局

表达式语言允许您编写处理View事件的表达式。DataBinding会自动生成将布局中的View与数据对象绑定所需的类。

DataBinding布局文件略有不同,以布局的根标记开头,后跟数据元素和视图根元素。这个视图元素是非绑定布局文件中的根元素。以下代码显示了一个示例布局文件:

<?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>

data节点中的变量user描述了一个可能会在布局中使用的变量

<variable name="user" type="com.example.User" />

布局中元素的属性可以使用“@{}”语法来执行其中的表达式获取值。这里,TextView文本设置为user变量的firstName属性:

<TextView android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:text="@{user.firstName}" />

备注:布局中的表达式应当保持精简,因为它们不能进行单元测试,并且IDE支持有限。为了简化布局表达式,可以使用自定义binding adapters.

Data object

现在我们假设您有一个简单对象来描述User实体:

data class User(val firstName: String, val lastName: String)

这种类型的对象具有不会改变的数据。这在一个应用中,如果只读取一次并且以后不再修改的,这是一种常见的情况。也可以使用遵循Java约定的对象,例如Java中使用getter方法,如以下示例所示:

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;
  }
}

从数据绑定的角度来看,这两个类是等价的。用于android:text属性的表达式@{user.firstName} 访问前一个类中的firstName字段和后一个类的getFirstName方法。或者,如果该方法存在,它也被解析为firstName()。

绑定数据

编译器会为每个布局文件生成一个绑定类。默认情况下,类的名称基于布局文件的名称,将其转换为Pascal大小写并添加Binding后缀。上述布局文件名为activity\_main.xml,因此相应生成的类为ActivityMainBinding。此类保存从布局属性(例如,用户变量)到布局视图的所有绑定,并知道如何为绑定表达式赋值。建议创建绑定的方法是在inflate布局时进行绑定,如以下示例所示:

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)

    val binding: ActivityMainBinding = DataBindingUtil.setContentView(
            this, R.layout.activity_main)

    binding.user = User("Test", "User")
}

在运行时,应用程序会在UI中显示这个User对象“Test”。或者,您可以使用LayoutInflater获取View,如以下示例所示:

val binding: ActivityMainBinding = ActivityMainBinding.inflate(getLayoutInflater())

如果在Fragment、ListView或RecyclerView适配器中使用数据绑定项,则可能更喜欢使用绑定类或DataBindingUtil类的inflate方法,如以下代码示例所示:

val listItemBinding = ListItemBinding.inflate(layoutInflater, viewGroup, false)
// or
val listItemBinding = DataBindingUtil.inflate(layoutInflater, R.layout.list_item, viewGroup, false)

详细Vx关注公众号:岛上码农编程!!!

标签:绑定,String,firstName,布局,详解,DataBinding,表达式
From: https://blog.51cto.com/u_16175630/7120368

相关文章

  • 鸿蒙入门开发教程:一文带你详解工具箱元服务的开发流程
    鸿蒙入门开发教程:一文带你详解工具箱元服务的开发流程一,基本概念元服务(原名原子化服务)是一种基于HarmonyOSAPI的全新服务提供方式,以HarmonyOS万能卡片等多种呈现形态,向用户提供更轻量化的服务。具有即用即走、信息外显、服务直达的特性。万能卡片(简称卡片)是一种界面展示形式,可......
  • [BitSail] Connector开发详解系列三:SourceReader
    更多技术交流、求职机会,欢迎关注字节跳动数据平台微信公众号,回复【1】进入官方交流群SourceConnector本文将主要介绍负责数据读取的组件SourceReader:SourceReader每个SourceReader都在独立的线程中执行,只要我们保证SourceSplitCoordinator分配给不同SourceReader的切片没有交集,在S......
  • [BitSail] Connector开发详解系列三:SourceReader
    更多技术交流、求职机会,欢迎关注字节跳动数据平台微信公众号,回复【1】进入官方交流群SourceConnector本文将主要介绍负责数据读取的组件SourceReader:SourceReader每个SourceReader都在独立的线程中执行,只要我们保证SourceSplitCoordinator分配给不同SourceReader的切......
  • Java中Date方法详解
    先进行专栏介绍本专栏是自己学Java的旅途,纯手敲的代码,自己跟着黑马课程学习的,并加入一些自己的理解,对代码和笔记进行适当修改。希望能对大家能有所帮助,同时也是请大家对我进行监督,对我写的代码进行建议,互相学习。Date方法Date类是用于表示日期和时间的类。它提供了一系列的方......
  • ulimit -a详解
    参数描述corefilesizecore文件的最大值为100blocks,datasegsize进程的数据段可以任意大filesize文件可以任意大pendingsignals最多有2047个待处理的信号maxlockedmemory一个任务锁住的物理内存的最大值为32kBmaxmemorysize一个任务的常驻物理内存的最大值......
  • C++之右值引用与完美转发与可变参数模板(万字长文详解)
    C++之右值引用与完美转发与可变参数模板左值引用和右值引用的概念​ 传统的C++语法中就有引用的语法,而C++11中新增了的右值引用语法特性,所以从现在开始我们之前学习的引用就叫做左值引用。无论左值引用还是右值引用,都是给对象取别名。那么到底什么是左值什么是右值呢?难道说赋......
  • $('[id^="heading"]')详解
    $('[id^="heading"]')是一个jQuery选择器,它选择了所有id以"heading"开头的元素。这意味着它会选中所有具有以"heading"开头的id属性的元素。举个例子,假设页面上有以下两个元素:<divid="heading1">...</div><divid="heading2">...</div>通过......
  • Nginx支持websocket的配置详解
     目录一、对wss与nginx代理wss的理解:二、Nginx支持websocket的配置一、对wss与nginx代理wss的理解:1、wss协议实际是websocket+SSL,就是在websocket协议上加入SSL层,类似https(http+SSL)。2、利用nginx代理wss【通讯原理及流程】客户端发起wss连接连到nginxnginx......
  • Git安装和TortoiseGit安装图文详解
    0、环境windows1064位 1、Git下载和安装Git官网:Git-DownloadingPackage(git-scm.com)                  右键可以看到这两个选项即安装成功。   2、TortoiseGit下载和安装官网地址:Download–Tortoi......
  • jmeter详解-线程组详解(1)-Thread Group
    Jmeterplugin插件的分类StandardSet组件:对线程组进行了扩展,扩充了许多丰富图表的监听器,可以用Jmeter来监控服务器ExtrasSet组件:支持远程监控,图表展示更加丰富ExtraswithLibsSet组件:提供对JSON的支持,新增了JMS取样器WebDriverSet组件:与WebDriver进行了集成,进行自动化测......