DataBinding的使用

什么是databinding?

Android 团队发布了一个数据绑定框架(Data Binding Library)。以后可以直接在 layout 布局 xml 文件中绑定数据了,无需再 findViewById 然后手工设置数据。

配置

 dataBinding{
        enabled = true
    }

MVVM

这里写图片描述
至于MVVM基本上和MVP一模一样,感觉只是名字替换了一下。他的关键技术就是今天的主题(Data Binding)。View的变化可以自动的反应在ViewModel,ViewModel的数据变化也会自动反应到View上。这样开发者就不用处理接收事件和View更新的工作,框架已经帮你做好了。

以下给出两篇学习文章
Android MVVM到底是啥?看完就明白了

完全掌握Android Data Binding

DataBinding用法代码下载

下面是使用过程中的一些总结:
首先定义了一个工具类

public class StringUtil {
    public static String capitalize(final String word) {
        if (word.length() > 1) {
            return String.valueOf(word.charAt(0)).toUpperCase() + word.substring(1);
        }
        return word;
    }
}

接下来我们要动态绑定,设置TextView的文字,我们可能会这样写

 <data>
        <variable
            name="user"
            type="com.example.databindingdemo.User"/>
        <variable
            name="StringUtil"
            type="com.example.databindingdemo.StringUtil"
            />
    </data>
 <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"     android:text="@{StringUtil.capitalize(user.firstName)}" />

但是这样写是有问题的,当你运行程序的时候,会报出下面的错误
这里写图片描述

大概的意思就是在这个地方不能使用静态的方法,不知道是为什么,但是在使用String的静态方法的时候,却没有报错,比如以下方式

 <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@{String.valueOf(num)}" />

具体原因现在还不知道

   <variable
            name="list"
            type="java.util.ArrayList<String>"/>

这里不能写泛型,否则会报下面的错
这里写图片描述

接下来看看对boolean的操作

  <variable
            name="error"
            type="boolean"/>
  <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@{error ? "error":"null"}"
             />

网上这样写是没问题的,但是我运行再自己的项目中,就报错了

设置点击事件报错

 <variable
            name="click"
            type="com.example.databindingdemo.MainActivity"/>
 <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@{click.click}" />

然后我们在MainActivity里面

 public void click(View view){
        user.setFirstName("狗");
    }

这时候报下面的错
这里写图片描述

设置List数据报错

 <variable
            name="list"
            type="java.util.ArrayList"/>
  <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@{list[0]}" />
   ArrayList<String> list = new ArrayList<>();
        list.add("AA");
        list.add("BB");
        binding.setList(list);
Error:Execution failed for task ':databindingdemo:compileDebugJavaWithJavac'.
> java.lang.RuntimeException: Found data binding errors.
****/ data binding error ****msg:Cannot find the setter for attribute 'android:text' with parameter type E on android.widget.TextView.
file:E:\workspace\financeApp\databindingdemo\src\main\res\layout\activity_main.xml
loc:45:28 - 45:34
****\ data binding error ****
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值