Data Binding初步体验

前言

Data Binding,就是数据绑定的意思。Data Binding 在布局文件中实现数据绑定声明,使数据的变化引起视图的自动更新,减少了逻辑代码,在Android中可以很方便的实现MVVM的开发模式。但如果我项目没有用MVVM模式,是不是就不能用了呢?那当然是可以的啦,也可以用来装装逼啊。

使用

在app里面添加,这样子就可以使用了,但开启后,应用总方法数好像多了很多。

android {
    ....
    dataBinding {
        enabled = true    
    }    
}
绑定数据

先建立一个bean类,和平时的一毛一样

public class User {
   public String firstName;
   public String lastName;

   public User(String firstName, String lastName) {
       this.firstName = firstName;
       this.lastName = lastName;
   }
}

然后,布局写成这样




    
        
    

    

        

        

    

注意了,布局和以前的不一样,首先根标签是 ,然后里面有一个标签,这里是声明变量和指定的实体类的。这里声明的变量“user”,可以在下面的布局使用,"type"则需要填写完整的实体类名。

    
        
    

然后布局内容,里面的控件需要改一下啦,@{user.firstName} ,user是上面定义的变量名,注意了,firstName这个变量是必须在你实体类里面已经定义的,不然编译不通过。


最后在activity里面调用就行了

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        ActivityMainBinding binding = DataBindingUtil.setContentView(this, R.layout.activity_main);
        User user = new User("景", "天");
        binding.setUser(user);
    }
}

ActivityMainBinding这个是自动生成的,是根据你布局R.layout.activity_main转换成的,对比一下就知道他的规则了,驼峰加后缀“Binding”。如无意外,app的Textview就会显示“景天”了。

绑定控件事件

如果要绑定控件的点击事件的话,在实体类里面添加方法

public class User {
    public String firstName;
    public String lastName;

    public User(String firstName, String lastName) {
        this.firstName = firstName;
        this.lastName = lastName;
    }

    public void onClickName(View view) {
        Toast.makeText(view.getContext(), "点击了名字", Toast.LENGTH_SHORT).show();
    }
}

然后布局里面声明一下就行了


同样需要注意的是,onClick里面的方法名要和实体类的一样才行

深入layout

使用Import元素,先添加引用

 

        

        

    

然后使用,结合表达式

 

这样,age大于9就显示了,不用再在activity里面判断了。

疑问

我看到官方文档写着


    
    
    
    
 

这样来引用list,用来绑定list的数据,很多博客都这么搬过来,但我自己试了下,编译的是就会报错。
提示:

Error:Execution failed for task ':databindingtest:dataBindingProcessLayoutsDebug'.> org.xml.sax.SAXParseException; 
systemId:file:/D:/Project/Name_yiqiming/databindingtest/build/intermediates/res/merged/debug/layout/activity_main.xml; lineNumber: 25; columnNumber: 49; 
与元素类型 "variable" 相关联的 "type" 属性值不能包含 '<' 字符。

错误里面明确告诉我们,type里面不能包含“<”符合,那List又怎么丢进去的,还望知道的朋友说一下

你可能感兴趣的:(Data Binding初步体验)