DataBinding的使用

来源:互联网 发布:身份证正则表达式 java 编辑:程序博客网 时间:2024/04/29 01:37

什么是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.xmlloc:45:28 - 45:34****\ data binding error ****
0 2
原创粉丝点击