在app的gradle的android添加
dataBinding{
enabled=true
}
xml使用
然后再要使用的布局里,选中最外面的布局,Alt+enter —》选择类似DataBinding的字样
然后会在最外面生成:layout、data
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools">
<data>
<variable
name="accountBean"
type="com.zfg.mvcmvpmvvm.bean.AccountBean" />
<variable
name="activity"
type="com.zfg.mvcmvpmvvm.mvvm.databinding.DemoActivity" />
</data>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:orientation="vertical"
tools:context=".mvvm.databinding.DemoActivity">
<TextView
android:id="@+id/tv_info"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="50dp"
android:gravity="center"
android:text="@{accountBean.name+'|'+accountBean.level}"
tools:text="账号|等级" />
<Button
android:id="@+id/bt_addLevel"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="50dp"
android:gravity="center"
tools:text="账号等级+1"
android:onClick="@{activity.onClick}"/>
</LinearLayout>
</layout>
在Data添加名字与类型
<data>
<variable
name="accountBean"
type="com.zfg.mvcmvpmvvm.bean.AccountBean" />
<variable
name="activity"
type="com.zfg.mvcmvpmvvm.mvvm.databinding.DemoActivity" />
</data>
在控件中添加
android:text="@{accountBean.name+'|'+accountBean.level}"
tools:text="账号|等级" /> //注意:这里前缀是tools,自己敲出来
android:onClick="@{activity.onClick}"/>
bean
package com.zfg.mvcmvpmvvm.bean;
import androidx.databinding.BaseObservable;
import androidx.databinding.Bindable;
import com.zfg.mvcmvpmvvm.BR;
public class AccountBean extends BaseObservable {
private String name;//账号名称
private int level;//账号等级
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
//希望getLevel自动发生改变,我们就在这上面添加一个注解
@Bindable
public int getLevel() {
return level;
}
public void setLevel(int level) {
this.level = level;
notifyPropertyChanged(BR.level);
}
}
继承和执行上面的bean会自动生成,其中level是自己敲的时候加上去的
package com.zfg.mvcmvpmvvm;
public class BR {
public static final int _all = 0;
public static final int activity = 1;
public static final int level = 2;
public static final int accountBean = 3;//AccountBean的这里:notifyPropertyChanged(BR.level);
}
activity
package com.zfg.mvcmvpmvvm.mvvm.databinding;
import androidx.appcompat.app.AppCompatActivity;
import androidx.databinding.DataBindingUtil;
import android.os.Bundle;
import android.view.View;
import android.widget.Toast;
import com.zfg.mvcmvpmvvm.R;
import com.zfg.mvcmvpmvvm.bean.AccountBean;
import com.zfg.mvcmvpmvvm.databinding.ActivityDemoBinding;
public class DemoActivity extends AppCompatActivity {
private ActivityDemoBinding binding;
private AccountBean accountBean;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
binding = DataBindingUtil.setContentView(this,R.layout.activity_demo);
accountBean=new AccountBean();
accountBean.setName("TEST");
accountBean.setLevel(100);
binding.setAccountBean(accountBean);
binding.setActivity(this);
}
public void onClick(View view){
// Toast.makeText(this,"点击了",Toast.LENGTH_SHORT).show();
int level=accountBean.getLevel();
accountBean.setLevel(level+1);
// binding.setAccountBean(accountBean);//每次都用到,我们可以优化
}
}