首页 > 其他分享 >Android DataBinding——导入以及生成的绑定类

Android DataBinding——导入以及生成的绑定类

时间:2023-09-23 18:33:19浏览次数:46  
标签:布局 示例 绑定 导入 DataBinding Android inflate View

导入

DataBinding库提供了导入、变量和include等功能。导入可以方便在引用布局文件中引用类;变量允许您描述可在绑定表达式中使用的属性;Includes允许您在整个应用程序中重用复杂的布局。

Imports

Imports允许您轻松地在布局文件中的引用类,就像在代码中一样。data元素内部可以使用零个或多个import元素。以下代码示例将View类导入布局文件:

<data>
    <import type="android.view.View"/>
</data>

通过导入View类,可以从绑定表达式中引用它。以下示例显示了如何引用View类的VISIBLE和GONE常量:

<TextView
   android:text="@{user.lastName}"
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"
   android:visibility="@{user.isAdult ? View.VISIBLE : View.GONE}"/>

类型别名alias

当存在类名冲突时,其中一个类可能会重命名为别名。以下示例将com.example.realstate包中的View类重命名为Vista:

<import type="android.view.View"/>
<import type="com.example.real.estate.View" alias="Vista" />

您可以使用Vista引用com.example.real.estate.View和View可以用于引用布局文件中的android.View.View。

导入其他类

导入的类型可以用作变量和表达式中的类型引用。以下示例显示了用作变量类型的“User”和“List”:

<data>
    <import type="com.example.User"/>
    <import type="java.util.List"/>
    <variable name="user" type="User"/>
    <variable name="userList" type="List<User>"/>
</data>

注意:Android Studio尚未处理导入,因此导入变量在IDE中还不能自动补全,但您的应用程序仍可以编译,您可以通过在变量定义中使用完全限定的名称来解决IDE问题。

也可以使用导入的类型强制转换表达式的一部分。以下示例将连接属性强制转换为User类型:

<TextView
   android:text="@{((User)(user.connection)).lastName}"
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"/>

在表达式中引用静态字段和方法时,也可以使用导入的类型。以下代码导入MyStringUtils类并引用其大写方法:

<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"/>

就像在java代码中一样,java.lang.*是自动导入的。

生成的绑定类

DataBinding库会生成用于访问布局的变量和视图的绑定类。本文档展示了如何创建和自定义生成的绑定类。 生成的绑定类将布局变量与布局中的视图链接起来。您可以自定义绑定的名称和包。所有生成的绑定类都继承自ViewDataBinding类。 框架会为每个布局文件生成一个绑定类。默认情况下,类的名称将布局文件的名称是转换为Pascal大小写并添加Binding后缀。因此,例如,如果布局文件名为activity_main.xml,则相应生成的类为ActivityMainBinding。此类保存从布局属性到View的所有绑定,并知道如何为绑定表达式赋值。

生成绑定对象

绑定对象在inflate布局后立即创建,以确保布局中设置有表达式的View的层次结构在绑定数据之前不会被修改。将对象绑定到布局的最常见方法是在绑定类上使用静态方法。您可以使用绑定类的inflate() 方法来加载View层次结构并将对象绑定到它,如以下示例所示:

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

    val binding: MyLayoutBinding = MyLayoutBinding.inflate(layoutInflater)

    setContentView(binding.root)
}

还有另外一个重载的inflate()方法,它除了LayoutInflater对象外,还接受ViewGroup对象,如以下示例所示:

val binding: MyLayoutBinding = MyLayoutBinding.inflate(getLayoutInflater(), viewGroup, false)

如果使用不同的机制对布局进行inflate,则可以将其单独绑定,如下所示:

val binding: MyLayoutBinding = MyLayoutBinding.bind(viewRoot)

有时您事先不知道绑定类型。在这种情况下,可以使用DataBindingUtil类创建绑定,如以下代码片段所示:

val viewRoot = LayoutInflater.from(this).inflate(layoutId, parent, attachToParent)
val binding: ViewDataBinding? = DataBindingUtil.bind(viewRoot)

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

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


标签:布局,示例,绑定,导入,DataBinding,Android,inflate,View
From: https://blog.51cto.com/u_16175630/7580184

相关文章

  • Android Failed to resolve: com.github.PhilJay:MPAndroidChart:v3.1.0
    2022.3.1版本修改settings.gradledependencyResolutionManagement{repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)repositories{maven{url"https://jitpack.io"}//Addthisrepositoryjcenter()//orotherrep......
  • 熬过月余终见offer,一份Android面经
    前言最近我一直在牛客刷帖子看到好多对于现在IT环境的负面消息,自己也是找了一个多月Offer一个都没有,又看到这些感觉面试的勇气又少了…这种状态我根本就不知道任何转变,真的是投简历都不想投!就在这样的状态下,朋友说他那边内推有消息了,说待会HR会和我联系。怎么说了,并没有太多惊喜,因......
  • 干货:《Android 性能优化实战篇》带你杀穿金九银十
    近年来,由于疫情和互联网行业寒冬的影响,Android开发领域的竞争变得更加激烈。各大公司的业务线收缩和裁员成为了常规操作,导致职场环境日益严峻。作为一个螺丝钉,我们想要卷出重围,性能优化必须了解一下!本文将梳理Android性能优化的知识模块,帮助初学者了解应该从哪些方面入手学习性能优......
  • 金九银十Android面试该怎么有效的回答,看完这篇文章就懂了
    今年的严寒使得许多职场人的求职时间变长,以往火热的金三银四不再,金九银十九承载着广大程序员的希望。但是在这个特殊情况下,竞争压力也会增大,各大企业对于求职者的要求也随之增高。很多小伙伴都面临着这样的情况:千辛万苦拿到面试机会,却因各种原因翻车。“在面试的时候不能将自己的真......
  • Android开发笔记[4]-串口控制esp32及使用摄像头
    摘要无需root权限,Android使用串口与esp32通信控制小灯开关;开启Android摄像头预览.平台信息AndroidStudio:ElectricEel|2022.1.1Patch2Gradle:distributionUrl=https://services.gradle.org/distributions/gradle-7.5-bin.zipjvmTarget='1.8'minSdk21targetSdk......
  • android 实现左右滑动和底部菜单切换Demo
    packagecom.tools.ttt;importstaticandroid.content.ContentValues.TAG;importandroid.content.pm.ActivityInfo;importandroid.content.res.Configuration;importandroid.os.Bundle;importandroid.util.Log;importandroid.view.MenuItem;importcom.googl......
  • Android面试必问的6个问题,跟面试官斗智斗勇
    前言在职场中,面试是筛选和评估候选人的重要环节。那么对于各位程序员来讲,在面试的时候,面对HR的“套路”又该如何应对呢?以下是在职场中面试必问的6个问题,以及应对思路。一、请做一下简单的自我介绍面试时,基本上所有求职者听到的第一个问题都是这个,而一般人回答往往也只说姓名、年龄......
  • 为什么Android程序员越来越难找到工作了?
    Android开发现状如何看待一个行业行不行?有两点:这个行业有没有死亡?有没有很多公司提供这个行业的岗位?拿塞班来举例,塞班完全死亡了,因为塞班完全被Android和iOS给替代了,并且没有公司来提供塞班的开发岗位对于Android,目前Android正如日中天,其在移动设备上的全球占有率不用我多说了吧,各......
  • Android DataBinding ——事件处理
    DataBinding允许您编写表达式去处理从View分发的事件。例如onClick()方法。事件属性名称由监听器方法的名称确定,但有少数例外。例如,View.OnClickListener有一个方法onClick(),因此此事件绑定的属性为android:onClick。有一些专门的点击事件处理者(注:它们也接受View.OnClickListener......
  • android-bottom_navigation 菜单不显示问题
    protectedvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);binding=ActivityMainBinding.inflate(getLayoutInflater());setContentView(binding.getRoot());BottomNavigationViewnavView=findViewById(R.id.nav_view)......