实现数据绑定

数据绑定 - 想法

  • 关于数据绑定的重要思想是创建一个对象,在编译时将两条遥远的信息连接/映射/绑定在一起,这样您就不必在运行时查找它。
  • 向您展示这些绑定的对象称为 Binding 对象。它是由编译器创建的,虽然了解它在幕后的工作原理很有趣,但没有必要了解数据绑定的基本用法。

数据绑定和findViewById

  • findViewById 是一个代价高昂的操作,因为它每次调用时都会遍历视图层次结构。
  • 启用数据绑定后,编译器会创建对 a 中<layout>具有 id 的所有视图的引用,并将它们收集到 Binding 对象中。
  • 在代码中,您创建绑定对象的实例,然后通过绑定对象引用视图,而无需额外的开销。

数据绑定视图和数据

  • 更新数据然后更新视图中显示的数据非常麻烦并且是错误的来源。将数据保留在视图中也违反了数据和表示的分离。
  • 数据绑定解决了这两个问题。您将数据保存在数据类中。您可以<data>向 中添加一个块,<layout>以将数据标识为与视图一起使用的变量。视图引用变量。
  • 编译器生成绑定视图和数据的绑定对象。
  • 在代码中,您通过绑定对象引用和更新数据,这会更新数据,从而更新视图中显示的内容。
  • 将视图绑定到数据集是使用数据绑定的更高级技术的基础。

在本练习中,您将通过使用数据绑定而不是 findViewById 来改进 AboutMe 应用程序,并使用绑定到 name_text 和nickname_text 视图的实际数据来显示信息。

请执行下列操作:

  1. 在 android 部分内的应用程序模块中的 build.gradle 文件中启用数据绑定:
dataBinding { enabled = true }

  1. 将activity_main.xml中的所有视图包装到一个<layout>标签中,并将命名空间声明移动到该<layout>标签中。
  2. 在MainActivity中,创建一个绑定对象:
private lateinit var binding: ActivityMainBinding
  1. 在onCreate中,使用DataBindingUtil设置内容视图:
binding = DataBindingUtil.setContentView(this, R.layout.activity_main)
  1. 使用绑定对象替换所有对 findViewById 的调用,例如:
binding.doneButton.setOnClickListener….etc

提示:您可以在点击处理程序中使用 apply() 使您的代码更加简洁和可读。

  1. 为姓名和昵称创建数据类 MyName。
data class MyName(var name: String = "", var nickname: String = "")
  1. 添加一个<data>块到activity_main.xml。数据块位于布局标记内部,但位于视图标记之前。在数据块内,为 MyName 类添加一个变量。
<data> 

 <variable name="myName"

 type="com.example.android.aboutme.MyName" />

 </data>

  1. 在name_text、nickname_edit和nickname_text中,将对字符串文本资源的引用替换为对变量的引用,例如>
android:text="@={myName.name}"

  1. 在 MainActivity 中,创建 MyName 的实例。
// Instance of MyName data class. private val myName: MyName = MyName("Aleks Haecky")
  1. 并在 onCreate() 中,将 binding.myName 设置为它。
       binding.myName = myName
  1. 在addNickname中,在myName中设置昵称的值,调用invalidateAll(),数据应该显示在您的视图中。
myName?.nickname = nicknameEdit.text.toString()
 // Invalidate all binding expressions and request a new rebind to refresh UI invalidateAll()

  1. 当您运行代码时,它应该没有错误,并且外观和工作方式完全相同!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值