我是靠谱客的博主 优秀发夹,这篇文章主要介绍MVVM中data binding系列(二),现在分享给大家,希望可以做个参考。

一、自定义Binding类名

在默认情况下,Binding辅助类的名称取决于布局文件的命名,将布局文件的名称按驼峰命名规则更改后,再在后面加上Binding。如布局文件名称为activity_main,对应的Binding辅助类的名称就是ActivityMainBinding。

那么该怎么自定义Binding辅助类的名称呢?看看下面代码

复制代码
1
2
3
4
5
6
<data class="com.mvvm.CustomBinding"> <variable name="list" type="ArrayList&lt;String>" /> </data>

也可以

复制代码
1
2
3
4
5
6
<data class=".CustomBinding"> <variable name="list" type="ArrayList&lt;String>" /> </data>

我们可以修改activity_main布局文件中data 节点的class属性,以上两种修改方案只是辅助类CustomBinding生成的所在的包不同而已。
然后在Activity中
修改如下代码

复制代码
1
2
CustomBinding dataBind = DataBindingUtil.setContentView(this, R.layout.activity_main);

这么自定义Binding辅助类就可以了。

二、静态方法的调用

新建静态方法

复制代码
1
2
3
4
5
6
7
public class Utils { public static String getName(Student student){ if(null != student) return student.getName(); return null; } }

布局文件里面调用

复制代码
1
2
3
4
5
6
<TextView android:id="@+id/tv_name" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@{Utils.getName(student)}" />

注意Utils类要导包,student要在data标签下定义,student的真实值需要在Activity中设置。

三、支持表达式

如支持“+”进行字符串拼接

复制代码
1
2
3
4
5
6
<TextView android:id="@+id/tv_age" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@{`Age:`+String.valueOf(student.age)}" />

注意这里包裹Age:的不是单引号,是键盘Tab键上面的键。

支持三目运算

复制代码
1
2
3
4
5
6
<TextView android:id="@+id/tv_age" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@{isShow?View.VISIBLE:View.GONE}" />

dataBing还支持很多表达式,如instanceof,位移等,在这里就不一一赘述了。

四、Converter

Converter是转换器,如果你现有的数据格式和要显示的数据格式不一致,就可以用Converter进行转换。
举个例子
现有数据为java.util.Date,页面上要显示的的是String类型的时间
先定义布局文件的代码

复制代码
1
2
3
4
<variable name="time" type="java.util.Date" />
复制代码
1
2
3
4
5
6
<TextView android:id="@+id/tv_time" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@{time}" />

再定义转换器

复制代码
1
2
3
4
5
6
7
8
9
public class Utils { @BindingConversion public static String convertDate(Date date){ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); return sdf.format(date); } }

这样只需要在Activity中设置time变量的值就可以 了。

最后

以上就是优秀发夹最近收集整理的关于MVVM中data binding系列(二)的全部内容,更多相关MVVM中data内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(72)

评论列表共有 0 条评论

立即
投稿
返回
顶部