DataBinding的使用之BindAdapter

BindingAdapter可以通过BindAdapterd注解,实现当数据发生变化时调用特定方法。

BindingAdapter的使用流程如下:

1、定义javaBean.,继承BaseObservable,定义可观察属性

2、xml定义属性去绑定javaBean的某一个成员

3、给想调用的方法增加BindingAdapter注解

下面看一下示例代码:

xml:




    
        


    

    

        

        

JavaBean:

public class BindingAdapterBean extends BaseObservable {
    public final ObservableField price = new ObservableField<>();
}

Method类:注意,要把TextView(或者View)和价格作为参数,方法的第一个参数为调用者本身,也就是使用了 android:text属性的tv_price,第二个参数为tv_price传递过来的参数,也就是从app:price处传过来的值。否则会编译失败

public class MethodUtil {
    @BindingAdapter({"price"})
    public static void onPriceChange(TextView view,int price){
        Log.e("MethodUtil","价格发生变化了,价格为"+price);

    }
} 

Activity:

public class BindingAdapterTestActivity extends AppCompatActivity {

    private BindingAdapterBean bindingAdapterBean;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_bindingadapter);
        ActivityBindingadapterBinding binding = DataBindingUtil.setContentView(this,R.layout.activity_bindingadapter);
        bindingAdapterBean = new BindingAdapterBean();
        bindingAdapterBean.price.set(100);
        binding.setBindingAdapterBean(bindingAdapterBean);
    }

    public void click(View view){
        bindingAdapterBean.price.set(200);
    }
}

运行:

不点击按钮情况下:打印日志

点击按钮:价格改变,触发MethodUtil的注解方法调用,注意:如果价格不变,就算是重新设置一遍,也是不会触发调用的

你可能感兴趣的:(DataBinding,android,java,android,studio)