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");
}

浙公网安备 33010602011771号