Android DataBinding学习和实践(三)

书承上文,这次我们来探究一下生命周期绑定和双向绑定,然后会介绍一种架构模式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使用了单向绑定。运行一下查看结果

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值