DataBinding 学习系列(1)
gradle中开启dataBinding
//核心配置代码在这里,配置在要使用DataBinding的module中
dataBinding{
enabled = true
}
public class MainActivity extends BaseActivity { /*命名规则是 layot文件名第一个字母大写,后边加上binding,此类是自动生成的*/ ActivityMainBinding mActivityMainBinding; private String TAG="MainActivity"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mActivityMainBinding = DataBindingUtil.setContentView(this, R.layout.activity_main); Activity_Main_Bean bean = new Activity_Main_Bean(); mActivityMainBinding.setMainBean(bean);//绑定对象(数据对象) mActivityMainBinding.setActivity(this);//绑定对象(函数对象) } public void clickFirst(View view) { ((Button)view).setText("我被点击了 -- clickFirst"); Log.d(TAG,"clickFirst"); } }
DataBinding 使用 DataBindingUtil.setContentView(activity,layoutID) 替换 页面 setContentView方法,同时返回一个layoutID对应布局文件名首字母大写的一个对象,此对象是编译器自动生成的
xml文件转换为适合DataBinding使用的xml
1,鼠标选中,然后 alt+enter 快捷键
2,直接回车
生成如下的布局文件
事件绑定
1,空参绑定
#数据绑定 <data> <variable name="mainBean" type="xyz.djytest.mvvm_test.bean.Activity_Main_Bean" /> </data> #点击事件空参绑定 <Button android:id="@+id/button_1" android:text="修改text文字" android:onClick="@{() -> mainBean.setText()}" android:layout_width="wrap_content" android:layout_height="wrap_content"/> #xyz.djytest.mvvm_test.bean.Activity_Main_Bean 类中的方法 public void setText() { this.text = “空参”; notifyPropertyChanged(BR.text); }
2,指定类型参数绑定
#数据绑定 <data> <variable name="mainBean" type="xyz.djytest.mvvm_test.bean.Activity_Main_Bean" /> <variable name="input" type="java.lang.String" /> </data> #数据双向绑定 <EditText android:id="@+id/editText" android:layout_width="200px" android:layout_height="wrap_content" android:text="@={input}" /> #点击事件自定义参数绑定 <Button android:id="@+id/button_1" android:text="修改text文字" android:onClick="@{() -> mainBean.setText(intput)}" android:layout_width="wrap_content" android:layout_height="wrap_content"/> #xyz.djytest.mvvm_test.bean.Activity_Main_Bean 类中的方法 public void setText(String text) { if (text == null || text.trim().length()== 0){ text = "null"; } this.text = text; notifyPropertyChanged(BR.text); }
3,多参绑定
#数据绑定 <data> <variable name="activity" type="xyz.djytest.mvvm_test.activity.MainActivity" /> <variable name="input" type="java.lang.String" /> </data> #数据双向绑定 <EditText android:id="@+id/editText" android:layout_width="200px" android:layout_height="wrap_content" android:text="@={input}" /> #点击事件多个参数绑定 <Button android:id="@+id/button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:onClick="@{(view)->activity.paramsClick(view,input)}" android:text="@{mainBean.buttonText}" /> mActivityMainBinding.setActivity(this);//绑定view事件 #xyz.djytest.mvvm_test.activity.MainActivity 绑定的方法 public void paramsClick(View view,String input){ mActivityMainBinding.getMainBean().setText("我是改变后的text"); mActivityMainBinding.getMainBean().setImgID(R.drawable.vc_logo); ((Button)view).setText("我被点击了"); Log.d(TAG, "EditText 内容为 "+input); Log.d(TAG, "改变了text"); }