- 在 /app 下的 build.gradle 中,在android 里开启 databinding,如下所示:
android {
...
dataBinding {
enabled = true
}
}
- 自定义类 ViewModel,如下所示:
public class ViewModel extends BaseObservable {
private int visibility = View.VISIBLE;
@Bindable
public int getVisibility() {
Log.e("ViewModel", "Visibility=" + visibility);
return visibility;
}
public void setVisibility(int visibility) {
Log.e("ViewModel", "visibility_set = "+ visibility);
this.visibility = visibility;
notifyPropertyChanged(BR.visibility);
}
}
说明:
- 自定义类一定要继承 BaseObservable
- @Bindable 一定要绑定到 getter 上
- notifyPropertyChanged(BR.xx) 一定要放在 setter 中
- 将自定义类与布局文件 activity_main.xml 绑定
<layout>
<data>
<variable
name="viewModel"
type="xxx.xxxx.ViewModel" />
</data>
<RelativeLayout>
<View
android:visibility="@{viewModel.visibility}" />
</RelativeLayout>
</layout>
说明:
- <layout> 标签与 <RelativeLayout> 标签中可以填入一般布局中的属性
- type 属性一定要填写自定义类的完整路径
- 在 Activity 中进行绑定与刷新
// 1. 绑定
ActivityMainBinding binding =
DataBindgUtil.setContentView(this, R.layout.activity_main);
ViewModel viewModel = new ViewModel();
binding.setViewModel(viewModel);
说明:
- 在布局文件中引入 DataBinding 之后,会自动生成 Binding 类
// 2. 刷新
viewModel.setVisibility(viewModel.getVisibility()
== View.VISIBLE ? View.GONE : View.VISIBLE);