1、需要开启DataBinding功能:
在build.gradle配置:
android{ dataBinding{ enabled = true } } 2、布局布局中,根节点要以layout开头,声明数据使用data标签。在data中可以为数据对象声明变量,引入要使用的类等。(1)在具体控件中使用对象的数据也挺简单的,使用@{对象变量.对象属性}就可以取出数据了;(2)支持绑定事件:@{对象.方法名(参数)}。
代码如下:activity_main.xml
在ManiActivity中,需要为布局和数据进行绑定操作:DataBindingUtil.setContentView(Activity activity, int layoutId)
package com.ha.cjy.databingdemo; import android.databinding.DataBindingUtil; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.EditText; import com.ha.cjy.databingdemo.databinding.ActivityMainBinding; import com.ha.cjy.databingdemo.model.UserModel; public class MainActivity extends AppCompatActivity implements MainActivityPresenter{ //对应的是layout文件名,后缀Binding,这个是自动生成的 private ActivityMainBinding binding; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); binding = DataBindingUtil.setContentView(this,R.layout.activity_main); binding.setPresenter(this); UserModel userModel = new UserModel("测试姓名","18012365485"); binding.setUser(userModel); } @Override public void onClickEvent(View view) { //注意:使用DataBinding,控件的获取应该使用DataBinding对象,而不是通过findViewById获取(这样的方式获取不到控件的文本内容) userModel.setUserName(binding.etUserName.getText().toString()); userModel.setTelPhone(binding.etTelPhone.getText().toString()); binding.setUser(userModel); } } 这样子做,就完成了一个简单的dataBinding的使用,代码也比以前简洁了许多。 但是,看到这里,同学们不禁要问了:“不是说dataBinding的核心功能是实现单向数据绑定呀,没有看到呀,还是以前取出输入的文本重新赋值的做法,只是实现形式不一样而已。” 没错,这样的做法确实没有体现出单向绑定数据功能。接下来,我们来改造一下代码。 package com.ha.cjy.databingdemo; import android.databinding.DataBindingUtil; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import com.ha.cjy.databingdemo.databinding.ActivityMainBinding; import com.ha.cjy.databingdemo.model.UserModel; public class MainActivity extends AppCompatActivity implements MainActivityPresenter{ //对应的是layout文件名,后缀Binding,这个是自动生成的 private ActivityMainBinding binding; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //进行DataBinding绑定 binding = DataBindingUtil.setContentView(this,R.layout.activity_main); binding.setPresenter(this); UserModel userModel = new UserModel("测试姓名","18012365485"); binding.setUser(userModel); } @Override public void onClickEvent(View view) { //注意:使用DataBinding,控件的获取应该使用DataBinding对象,而不是通过findViewById获取(这样的方式获取不到控件的文本内容) binding.getUser().setUserName(binding.etUserName.getText().toString()); binding.getUser().setTelPhone(binding.etTelPhone.getText().toString()); } }