android data binding jetpack VIII BindingConversion
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的更多相关文章
- android data binding jetpack VII @BindingAdapter
android data binding jetpack VIII BindingConversion android data binding jetpack VII @BindingAdapter ...
- android data binding jetpack VI 清理一些概念。BR 运算表达式
android data binding jetpack VIII BindingConversion android data binding jetpack VII @BindingAdapter ...
- android data binding jetpack V 实现recyclerview 绑定
android data binding jetpack VIII BindingConversion android data binding jetpack VII @BindingAdapter ...
- android data binding jetpack IV 绑定一个方法另一种写法和参数传递
android data binding jetpack VIII BindingConversion android data binding jetpack VII @BindingAdapter ...
- android data binding jetpack II 动态数据更新
android data binding jetpack VIII BindingConversion android data binding jetpack VII @BindingAdapter ...
- android data binding jetpack I 环境配置 model-view 简单绑定
android data binding jetpack VIII BindingConversion android data binding jetpack VII @BindingAdapter ...
- android data binding jetpack III 绑定一个方法
第三篇 给view绑定一下方法响应. (补充:1.被绑定的方法必须是public的. 1.绑定方法可以用主语法.也可以用以下双冒号方式“::” android:onClick="@{pr ...
- android data binding jetpack VIIII 第一坑
<LinearLayout android:id="@+id/ll_item_home_page_pics" android:layout_width="wrap_ ...
- Android Data Binding代码实践(告别findViewById)(四)
Data Binding实战(一) Data Binding语法解析(二) Data Binding高级用法(三) 好了,继前三篇学习了Data Binding之后,我们可以发现它的强大之处有这么几点 ...
随机推荐
- Python应用范围seo
Python有许多OOP概念,包括类.对象.数据和方法.抽象.封装.继承和多态性等原则也可以使用Python实现和表示.python有几个高级函数,包括迭代器.生成器.列表分析器.lambda表达式和 ...
- wepy 开发小程序, 为什么设置pages路径的时候总是找不到 js 文件?
1,路径先检查仔细了 2,别说话,重新run 3,可能是版本问题,重新搭工程
- 18.SSM整合_搭建开发环境
1.导入jar包 mybatis的Jar包 ehcache的Jar包 spring的 Jar包 mybatis 与 spring 整合Jar包 JSON的jar包 Jaskson的Jar包 Hiber ...
- 【Struts2】文件上传与下载
一.上传 1.1 Struts2实现步骤 浏览器端 服务器端 1.2 关于Struts2中文件上传细节: 1.3 示例 jsp文件 Action类 struts.xml文件配置 二.下载 2.1 文件 ...
- 【SpringBoot】入门程序和机制分析
一.初建项目 首先要导入SpringBoot的Maven依赖 <!-- Inherit defaults from Spring Boot --> <!-- 这是SpringBoot ...
- linux数码管驱动程序和应用程序
- Hadoop_31_MapReduce参数优化
1.资源相关参数 (1) mapreduce.map.memory.mb: 一个Map Task可使用的资源上限(单位:MB),默认为1024.如果Map Task实际使用 的资源量超过该值,则会被强 ...
- golang shell 交叉编译
#!/usr/bin/env bash set -e uname_s=`uname -s | awk '{print tolower($0)}'` uname_m=`uname -m` timeTag ...
- SQL 递归查询,意淫CTE递归的执行步骤
今天用到了sql的递归查询.递归查询是CTE语句with xx as(....)实现的. 假如表Category数据如下. 我们想查找机枪这个子分类极其层次关系(通过子节点,查询所有层级节点).以下是 ...
- JS 字符串转字节截取
/* * param str 要截取的字符串 * param L 要截取的字节长度,注意是字节不是字符,一个汉字两个字节 * return 截取后的字符串 */ function CutStr(str ...