Android DataBinding学习和实践(三)

本文深入探讨Android DataBinding的双向绑定和生命周期绑定。通过实例讲解如何使用双向绑定简化代码,提高可阅读性,并介绍LiveData解决数据更新与控件生命周期同步的问题。在生命周期绑定部分,展示了如何利用LifecycleOwner确保数据只在活动状态时更新。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

书承上文,这次我们来探究一下生命周期绑定和双向绑定,然后会介绍一种架构模式MVVM。

一、双向绑定(tow-way binding)

        前面我们讲的都是单项绑定策略,即数据单方面通知视图已经更新。这里我们就来讲讲双向绑定的策略。

        先来看看现实中一个很简单的需求吧。假如我们现在有一个TextView和一个EditText控件,其中EditText使用的是密码本格式,要求我们在用户输入信息未提交时,显示某种算法加密后的密文时什么样的,显式在TextView中。

        按照一般的方法,我们可以先设置一个TextChange的事件,它会在EditText文本变换时读取变换后的文本,然后将它通过加密获得密文,最后使用setText方法写入TextView的。这个方法固然可以,但是却有很多代码,增加了代码的复杂性,降低了可阅读性。

        因此,我们可以使用双向绑定数据的办法。双向绑定方法的使用非常简单,与单项基本上是相似的,只是在使用在布局文件定义的变量时吧@{变量}改为@={变量}即可双向绑定。使用@={}方式绑定后,绑定的属性值变化会通知到绑定的变量,使变量可以做出相应的反应。

        我们继续使用前面文章例子中的变量book,在布局文件中添加一个EditText控件,具体代码如下。

<?xml version="1.0" encoding="utf-8"?>
<layout>
    <data class="MainBinding">
        ......
        <import type="android.util.Base64"/>
        ......
        <variable
            name="book"
            type="com.silencer.db.entity.ObservableBook" />
    </data>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
       .......>

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="0dp"
            android:layout_weight="1"
            android:id="@+id/main_text"
            android:text='@{Base64.encodeToString(book.name.getBytes(),0)}'/>
        <EditText
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:id="@+id/main_et"
            android:text='@={book.name}'/>

    </LinearLayout>
</layout>

        可以看到,我在变量声明的地方引入了Base64这个类来充当加密类。EditText使用了双向绑定,TextView使用了单向绑定。运行一下查看结果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值