DataBinding
DataBinding是Google推出的用于完成数据绑定,实现MVVM架构的工具。常规使用请参考Google Jepack套件binding类的定义
参考
步骤一
- 双向绑定属性,需要的参数设置
- 需要属性的getter和setter方法。
- 需要属性发生变化时触发回调
步骤二
-
使用BindingAdapter注解设置相关设置属性的setter函数,注解参数value是在xml中对应的属性名,方法的第一个参数是需要设置属性的view,第二个参数是需要设置的属性值
步骤三
用InverseBindingAdapter定义getter函数。
attribute是xml中的属性名,event是设置属性监听的属性名,类型是InverseBindingListener。
步骤四
这一步主要实现双向绑定的过程,使用BindingAdapter注解设置与第三步中event值相同的回调函数的setter函数。如果构造函数有多个参数,需要设置BindingAdpter对应多个value
步骤五:
源码参考如下
package com.example.remark.binding;
import androidx.databinding.BindingAdapter;
import androidx.databinding.InverseBindingAdapter;
import androidx.databinding.InverseBindingListener;
import com.example.mvvmhabit.binding.command.BindingCommand;
import com.example.remark.widget.RatingBar;
/**
* Desc:星星进度条 双向绑定业务
* <p>
* Date: 2019-10-11
* Copyright: Copyright (c) 2010-2019
* Company:
* Updater:
* Update Time:
* Update Comments:
*
* @Author:
*/
public class RatingBarAdapter {
@BindingAdapter("setStarStep")
public static void setStarStep(final RatingBar ratingBar, final float step) {
if (ratingBar.getStarStep() != step) {
ratingBar.setStar(step);
}
}
@InverseBindingAdapter(attribute = "setStarStep", event = "displayAttrChanged")
public static float getStartStep(final RatingBar ratingBar) {
return ratingBar.getStarStep();
}
@BindingAdapter(value = {"displayAttrChanged", "onRatingChange"},
requireAll = false)
public static void setChangeListener(final RatingBar view, final InverseBindingListener bindingListener, final BindingCommand<Float> onRatingChange) {
view.setOnRatingChangeListener(new RatingBar.OnRatingChangeListener() {
@Override
public void onRatingChange(float ratingCount) {
if (onRatingChange != null) {
onRatingChange.execute(ratingCount);
}
bindingListener.onChange();
}
});
}
}