android data binding jetpack VIII BindingConversion

android data binding jetpack VII @BindingAdapter

android data binding jetpack V 实现recyclerview 绑定

android data binding jetpack IV 绑定一个方法另一种写法和参数传递

android data binding jetpack III 绑定一个方法

android data binding jetpack II 动态数据更新

android data binding jetpack I 环境配置 model-view 简单绑定

@BindingConversion

绑定转换

意思是view某个属性需要一个值,但数据所提供的值跟这个需求有区别。

比如:background 需要drawable,但用户提供的是color int值或者是"#FFFFFF"这样的字符窜,那就不能满足了。需要转换一下。

@BindingConversion是用来满足这样的需求的,把“#FFFFFF”转成drawable

用法:

1.在任何一个类里面编写方法,使用@BindingConversion注解。这个与之前的bindingadapter一个用法。很难理解为什么这么做,之后再去看源码分析。

2.主法名随便起,叫啥都行。比如 intToDrawable

3.方法必须为公共静态(public static)方法,且有且只能有1个参数

4.重点:方法作用在什么地方的决定因素是:参数类型和返回值类型。两个一致系统自动匹配。

5.转换仅仅发生在setter级别,因此它是不允许以下混合类型:

<View
android:background="@{isError ? @drawable/error : @color/white}"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/> 例子:
    /**
* 将字符串颜色值转化为ColorDrawable
* 随例放哪个类里都行。随便叫啥都行。
* @param colorString 如:#ff0000
* @return
*/
@BindingConversion
public static ColorDrawable convertColorStringToDrawable(String colorString) {
int color = Color.parseColor(colorString);
return new ColorDrawable(color);
}
  我们在提供数据的类里定义如下:
   private String color;
public String getColor() {
return color;
}
  在V里绑定时使用他。     
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="20dp"
android:background="@{student.color}"
android:gravity="center"
android:text="@{student.name}"
android:textSize="18sp" />
效果:

有文章说慎重使用text转int。

使用注意
慎用convertStringToInt:

@BindingConversion
public static int convertStringToInt(String value)
{
int ret;
try {
ret = Integer.parseInt(value);
}
catch (NumberFormatException e)
{
ret = 0;
}
return ret;
}

如果使用databinding的android:text赋值是string类型,会被转换为int类型:

<variable
name="str"
type="String"/>
……………
<TextView
android:id="@+id/id_chute_group_one_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{str}" />

this.idTxt.setText(com.biyou.databinding.Converters.convertStringToInt(str));

运行的时候会报错:

android.content.res.Resources$NotFoundException: String resource ID #0x0
---------------------
作者:逆风Lee
来源:CSDN
原文:https://blog.csdn.net/lixpjita39/article/details/79049872
版权声明:本文为博主原创文章,转载请附上博文链接!

这个错误的原因是:正好TextView 有setText(int)方法,int 是RES资源。很好理解。

重点 重点 重点:方法作用在什么地方的决定因素是:参数类型和返回值类型。两个一致系统自动匹配。

总结前面两个知识点。

当数据和V的属性不匹配的时候可以有两个做法:

1.定义一个转换方法,使用bindingAdapter 起一个新的属性,在方法里对V进行操作。

2.使用BindingConversion转换成对应的资源类型。也就是本文。

 

android data binding jetpack VIII BindingConversion的更多相关文章

  1. android data binding jetpack VII @BindingAdapter

    android data binding jetpack VIII BindingConversion android data binding jetpack VII @BindingAdapter ...

  2. android data binding jetpack VI 清理一些概念。BR 运算表达式

    android data binding jetpack VIII BindingConversion android data binding jetpack VII @BindingAdapter ...

  3. android data binding jetpack V 实现recyclerview 绑定

    android data binding jetpack VIII BindingConversion android data binding jetpack VII @BindingAdapter ...

  4. android data binding jetpack IV 绑定一个方法另一种写法和参数传递

    android data binding jetpack VIII BindingConversion android data binding jetpack VII @BindingAdapter ...

  5. android data binding jetpack II 动态数据更新

    android data binding jetpack VIII BindingConversion android data binding jetpack VII @BindingAdapter ...

  6. android data binding jetpack I 环境配置 model-view 简单绑定

    android data binding jetpack VIII BindingConversion android data binding jetpack VII @BindingAdapter ...

  7. android data binding jetpack III 绑定一个方法

    第三篇 给view绑定一下方法响应. (补充:1.被绑定的方法必须是public的.   1.绑定方法可以用主语法.也可以用以下双冒号方式“::” android:onClick="@{pr ...

  8. android data binding jetpack VIIII 第一坑

    <LinearLayout android:id="@+id/ll_item_home_page_pics" android:layout_width="wrap_ ...

  9. Android Data Binding代码实践(告别findViewById)(四)

    Data Binding实战(一) Data Binding语法解析(二) Data Binding高级用法(三) 好了,继前三篇学习了Data Binding之后,我们可以发现它的强大之处有这么几点 ...

随机推荐

  1. struts 漏洞

    安装shop++ 安装成功 访问 http://127.0.0.1:8080 即网站首页 访问 http://127.0.0.1:8080/admin 即网站后台

  2. Outline 科学的上网

    outline 官网:https://getoutline.org/zh-CN/home 下载 Outline 管理器 下载 Outline 客户端 配置浏览器代理

  3. ASE19团队项目alpha阶段model组 scrum11 记录

    本次会议于11月15日,19时整在微软北京西二号楼sky garden召开,持续5分钟. 与会人员:Jiyan He, Kun Yan, Lei Chai, Linfeng Qi, Xueqing W ...

  4. js 扁平化输出数组

    1.使用数组的flat方法 [1,2,[3,[4,5]]].flat(Infinity) //[1, 2, 3, 4, 5] 2.实现方式二: var arr = [[1, 2, 23], [13, ...

  5. shell脚本编程进阶及RAID和LVM应用2

    文件测试 存在性测试 -a FILE 这个选项的效果与-e 相同.但是它已经被弃用了,并且不鼓励使用 -e FILE 文件的存在性测试,存在则为真,否则为假 例:~]# [ -e /etc/rc.d/ ...

  6. 嵌入式Linux应用开发完全手册读书笔记——交叉编译工具选项说明

    交叉编译工具选项说明 arm-linux-gcc 一个c/c++文件要变成可执行文件需要4步:预处理 -> 编译 -> 汇编 -> 链接: 在使用arm-linux-gcc时的常用选 ...

  7. identity server4获取token和userInfo

    一.简介 IdentityServer4(ids4)是用于ASP.NET Core的OpenID Connect和OAuth 2.0框架.在许多成熟的.net core框架中都完美的集成的该身份服务框 ...

  8. java面试知识记录

    1.数据库 (1)数据库优化      面试求职:数据库常见面试题(数据库优化思路) 数据库优化方案整理 (2)数据库的事务 MySQL——事务(Transaction)详解 MySQL 事务 2.设 ...

  9. Logstash工作原理

    Logstash事件处理有三个阶段:inputs → filters → outputs.是一个接收,处理,转发日志的工具.支持系统日志,webserver日志,错误日志,应用日志,总之包括所有可以抛 ...

  10. java中list和map的底层实现原理

    Collection(单列集合) List(有序,可重复) ArrayList 底层数据结构是数组,查询快,增删慢 线程不安全,效率高 Vector 底层数据结构是数组,查询快,增删慢 线程安全,效率 ...