Android|Android databinding 踩坑记录
在使用@BindingAdapter注解的时候,第一个属性的子类也会触发注解的方法,所以在定义多个value的时候,如果设置了requireAll = false,那么这个方法会和其他的定义了相同value并且使用同一种类型或者子类的方法冲突,会导致databinding找不到正确的方法在执行,例如:
@BindingAdapter(value = https://www.it610.com/article/{"android:text", "my_price_span_custome", "span_text_size"}, requireAll = false)
public static void setTextSpan(TextView textView, String text, boolean span, int textSize) {
if (!TextUtils.isEmpty(text)) {
if (span && !text.equals("¥0")) {
SpannableString sbs = new SpannableString(text);
if (text.length() >= 5) {
sbs.setSpan(new AbsoluteSizeSpan(textSize, true), 0, 1, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
sbs.setSpan(new AbsoluteSizeSpan(textSize, true), text.length() - 3, text.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
textView.setText(sbs);
}
} else {
textView.setText(text);
}
}
}
【Android|Android databinding 踩坑记录】与
//EditTextView双向绑定
@BindingAdapter("android:text")
public static void setEditText(EditText editText, String text) {
if (!editText.getText().toString().equals(text)) {
editText.setText(text);
}
}
//EditTextView双向绑定
@InverseBindingAdapter(attribute = "android:text", event = "edit_textview_change")
public static String setEditTextChange(EditText editText) {
return editText.getText().toString();
}//EditTextView双向绑定
@BindingAdapter(value = "https://www.it610.com/article/edit_textview_change", requireAll = false)
public static void setOnEditTextViewChangeListner(EditText editText, InverseBindingListener bindingListener) {
editText.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
bindingListener.onChange();
}@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
bindingListener.onChange();
}@Override
public void afterTextChanged(Editable s) {
bindingListener.onChange();
}
});
}
因为定义了相同的"android:text",这样会导致setEditText方法不会被执行,databinding的实现类会执行setTextSpan方法,导致onChange无限回调。只需要把requireAll设置为true就行了,true表示所有定义的value都被设置了属性,该方法才会被执行。
推荐阅读
- android第三方框架(五)ButterKnife
- Android中的AES加密-下
- 带有Hilt的Android上的依赖注入
- android|android studio中ndk的使用
- Android事件传递源码分析
- RxJava|RxJava 在Android项目中的使用(一)
- Android7.0|Android7.0 第三方应用无法访问私有库
- 深入理解|深入理解 Android 9.0 Crash 机制(二)
- android防止连续点击的简单实现(kotlin)
- Android|Android install 多个设备时指定设备