2020-08-20 自定义databinding双向绑定

DataBinding
DataBinding是Google推出的用于完成数据绑定,实现MVVM架构的工具。常规使用请参考Google Jepack套件binding类的定义

参考

  1. InverseBindingAdapter
  2. InverseBindingMethod
  3. InverseBindingMethods
  4. InverseBindingListener
步骤一
  1. 双向绑定属性,需要的参数设置
  • 需要属性的getter和setter方法。
  • 需要属性发生变化时触发回调
步骤二
  • 使用BindingAdapter注解设置相关设置属性的setter函数,注解参数value是在xml中对应的属性名,方法的第一个参数是需要设置属性的view,第二个参数是需要设置的属性值


    image.png
步骤三

用InverseBindingAdapter定义getter函数。

attribute是xml中的属性名,event是设置属性监听的属性名,类型是InverseBindingListener。

image.png
步骤四

这一步主要实现双向绑定的过程,使用BindingAdapter注解设置与第三步中event值相同的回调函数的setter函数。如果构造函数有多个参数,需要设置BindingAdpter对应多个value


image.png
步骤五:
image.png

源码参考如下

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:星星进度条 双向绑定业务
 * 

* 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 onRatingChange) { view.setOnRatingChangeListener(new RatingBar.OnRatingChangeListener() { @Override public void onRatingChange(float ratingCount) { if (onRatingChange != null) { onRatingChange.execute(ratingCount); } bindingListener.onChange(); } }); } }

你可能感兴趣的:(2020-08-20 自定义databinding双向绑定)